如何修复Java while循环搭配Scanner输入后反复提示的问题
问题根因
你代码的问题出在while循环的判断逻辑不符合预期:
- 原有循环条件
perfectQuizScore > quizScore的逻辑是「只要测验满分大于当前输入的分数,就继续执行循环」 - 输入小于满分的合法值时,条件判断依然成立,循环会再次执行,因此会重复打印输入提示
- 原逻辑甚至会出现输入超过满分的非法值时反而跳出循环的错误,完全和预期功能相反
修正方案
你原本的需求应该是「当输入的分数不合法(小于0/大于满分)时,循环要求用户重新输入」,按照以下逻辑修改即可:
- 初始化
quizScore为非法值(比如-1),保证第一次能正常进入循环 - 将循环条件修改为判断分数是否非法
修正后的代码参考:
// 初始化quizScore为非法值,保证首次进入循环 int quizScore = -1; // 只要分数不合法就持续循环要求输入 while (quizScore < 0 || quizScore > perfectQuizScore) { System.out.print("Enter a student's total quiz score : "); quizScore = Integer.parseInt(keyboard.nextLine()); if (quizScore > perfectQuizScore) { System.out.println("Invalid value! Score must not be greater than perfect score."); } else if (quizScore < 0) { System.out.println("Invalid value! Value must be greater than 0."); } }
修改后只有输入合法的分数(0 ≤ quizScore ≤ perfectQuizScore)时,循环才会终止,进入后续流程。
内容的提问来源于stack exchange,提问作者user17075925
相关产品推荐
相关产品推荐

