Java中如何实现输入'N'或'n'时退出for循环?
正确实现输入'N'/'n'时退出for循环的Java代码
你的代码里有个关键问题——用==比较字符串内容是Java里的常见误区,这会导致你判断'N'/'n'的逻辑失效。另外原代码的执行顺序也有点问题,应该先获取用户输入再判断是否退出,而不是先检查数组里的初始值。
给你修正后的代码:
System.out.println("Insert your inventory"); for (int i = 0; i < 20; i++) { System.out.print(i + 1 + ". "); // 先获取输入,同时去除首尾的空格/换行等空白字符 String userInput = s.nextLine().trim(); // 用equalsIgnoreCase忽略大小写比较内容,完美匹配'N'或'n' if ("N".equalsIgnoreCase(userInput)) { break; } // 如果不是退出指令,再存入数组 inventory[i] = userInput; }
关键细节解释:
- 为什么不能用
==?
Java中==比较的是字符串对象的内存引用,而不是文本内容。比如用户输入的"n"和你写的"n"可能是不同的对象,这时==会返回false,导致退出逻辑不生效。而equalsIgnoreCase()是专门用来比较字符串内容的,还能忽略大小写,正好符合你的需求。 - 为什么要加
trim()?
防止用户输入时不小心带了空格(比如输入" N "),这样的输入本来是想退出,但没trim的话就会判断失败,加了之后能处理这种情况。 - 为什么先获取输入再判断?
原代码里先检查inventory[i],但数组初始值可能是null或者其他默认值,逻辑顺序不对。应该先拿到用户的输入,先判断是否要退出,再把有效输入存入数组。
额外注意点:
如果这段代码之前你用了Scanner的nextInt()、next()这类方法,记得先调用一次s.nextLine()来吃掉残留的换行符,否则第一次nextLine()会读到空字符串,影响体验。比如:
// 假设之前读取过整数 int count = s.nextInt(); s.nextLine(); // 消费掉换行符 // 再执行上面的输入循环
内容的提问来源于stack exchange,提问作者bobthebilly
相关产品推荐
相关产品推荐

