如何在用户停止输入时终止Java中的while循环?
解决Java循环无法在用户停止输入时终止的问题
我明白你的困扰啦——现在你的代码会一直卡在那里等待输入,没法在用户输入完一组数值后自动终止循环对吧?咱们一步步来解决这个问题:
问题分析
你当前的while(true)循环只有在油量超过200或车辆数超过50时才会终止,但Scanner.nextInt()会一直阻塞程序,等待下一个输入值,哪怕用户已经按下回车结束输入了。另外你尝试的while(s1.nextInt().equals(true))报错,是因为nextInt()返回的是基本数据类型int,而基本类型没有equals()方法,这才导致了错误。
解决方案:利用Scanner.hasNext()判断输入是否结束
Scanner类的hasNext()方法可以判断是否还有下一个输入元素(不管是空格还是回车分隔的),我们可以把它作为循环的条件之一,这样当用户输入完所有数值并回车后,循环就会自动终止。
修改后的完整代码
import java.util.*; class petrol{ public static void main(String[] args){ int vehicle_counter=0,petrol_counter=0; System.out.println("Enter quantity of petrol to be filled in vehicles seperated by space:"); Scanner s1 = new Scanner(System.in); ArrayList<Integer> array = new ArrayList<Integer>(); // 修改循环条件:同时判断是否有输入、油量限制、车辆数限制 while(s1.hasNext() && petrol_counter <= 200 && array.size() < 50){ int input = s1.nextInt(); // 提前判断:如果加上当前输入会超油量,直接终止循环 if(petrol_counter + input > 200){ System.out.println("Quantity Exceeded 200 Litres."); break; } petrol_counter += input; vehicle_counter++; array.add(input); } // 额外判断:如果是因为车辆数到50终止的,给出提示 if(array.size() >= 50){ System.out.println("Number of Vehicles Exceeded 50."); } System.out.println("Hii"); s1.close(); // 记得关闭Scanner资源 } }
关键说明
- 循环条件逻辑:
s1.hasNext()会先检查是否还有输入,当用户输入完所有数值(比如2 3 4 2)并回车后,hasNext()返回false,循环直接终止。 - 提前判断油量:在累加之前先判断当前输入会不会导致油量超200,避免把超过限制的数值也加进去。
- 资源关闭:最后加上
s1.close()养成良好的资源管理习惯。
测试示例
当你输入2 3 4 2并按下回车后,程序会读完这四个数值,hasNext()返回false,循环终止,然后打印Hii,完全符合你的需求。
内容的提问来源于stack exchange,提问作者Jay Patel
相关产品推荐
相关产品推荐

