You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在用户停止输入时终止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资源
    }
}

关键说明

  1. 循环条件逻辑:s1.hasNext()会先检查是否还有输入,当用户输入完所有数值(比如2 3 4 2)并回车后,hasNext()返回false,循环直接终止。
  2. 提前判断油量:在累加之前先判断当前输入会不会导致油量超200,避免把超过限制的数值也加进去。
  3. 资源关闭:最后加上s1.close()养成良好的资源管理习惯。

测试示例

当你输入2 3 4 2并按下回车后,程序会读完这四个数值,hasNext()返回false,循环终止,然后打印Hii,完全符合你的需求。

内容的提问来源于stack exchange,提问作者Jay Patel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 15:37:55