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
相关产品推荐
相关产品推荐

