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

Java中使用while循环实现输入非法时重复输入的问题

解决Java输入非法值后无法重新输入的问题

嘿,别担心基础问题,刚上手Java的时候遇到这种循环逻辑的小坑太正常啦!我看了你的代码,问题出在那个while(true)循环里——不管用户输入的数值合不合法,你都直接执行了break,所以循环只跑了一次,自然没法让用户重新输入。

问题分析

你的原代码里,while(true)块的逻辑是:

  • 读取输入到quotas[i]
  • 如果数值非法,打印错误信息
  • 直接break跳出循环

这就导致哪怕输入错了,循环也直接结束,程序就去问下一个学生的配额了。我们需要调整逻辑,只有当输入合法的时候才跳出循环,不合法的话就留在循环里让用户重新输入。

另外还有个小细节:你定义的变量是NumberOfWorkers(大写N),但循环里用的是numberOfWorkers(小写n),这会导致编译错误,得统一变量名哦。

修改后的完整代码

import java.util.Scanner;
public class StoreQuota { // 类名按照Java规范首字母大写
    public static void main(String [] args) {
        Scanner input = new Scanner (System.in);
        int quotas [] = new int [100];
        int numberOfWorkers = 100; // 统一变量名,符合驼峰命名规范
        for (int i = 0; i < numberOfWorkers; i++) {
            // 序数词提示逻辑保留
            if (i == 0) {
                System.out.print("Enter the quota for the 1st student: ");
            } else if (i == 1) {
                System.out.print("Enter the quota for the 2nd student: ");
            } else if (i == 2) {
                System.out.print("Enter the quota for the 3rd student: ");
            } else {
                System.out.print("Enter the quota for the " + (i+1) + "th student: ");
            }
            
            // 核心修改:调整while循环的跳出逻辑
            while (true) {
                quotas[i] = input.nextInt();
                if (quotas[i] > 100 || quotas[i] < 0) {
                    System.out.println("Error - Can only be between 0 and 100. Please re-enter:");
                    // 输入非法,不break,继续循环等待重新输入
                } else {
                    // 输入合法,跳出循环,进入下一个学生的配额输入
                    break;
                }
            }
        }
        // 打印所有配额,优化格式避免末尾多余逗号
        System.out.println("\nThank you for your input. Your entered quotas are: ");
        for (int i = 0; i < numberOfWorkers; i++) {
            System.out.print(quotas[i]);
            if (i != numberOfWorkers - 1) {
                System.out.print(", ");
            }
        }
        input.close();
    }
}

关键修改点说明

  • 调整循环跳出逻辑:把break移到else分支,只有当输入的数值在0-100范围内时,才跳出while循环;非法输入时,循环会持续执行,直到用户输入合法值。
  • 统一变量名:修复了NumberOfWorkers和numberOfWorkers的大小写不一致问题,避免编译错误。
  • 优化输出格式:打印配额时,最后一个元素后面不再输出多余的逗号,让结果更美观。
  • 增强提示信息:错误提示里添加了Please re-enter:,让用户更明确需要重新输入。

额外小提示

如果想处理用户输入非整数(比如字母、符号)的情况,你还需要用input.hasNextInt()来判断输入是否为整数,避免程序抛出异常。不过这是进阶内容,如果你当前只需要处理整数范围的问题,上面的代码就完全够用啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.27 14:32:41