Java程序if-else条件执行异常:输入非数字时无法重新输入问题排查
问题分析与解决方案
嘿,我一眼就揪出问题根源了!你的程序输入非数字字符串就直接退出,核心原因是catch块里的exit = true;语句——一旦输入非数字触发NumberFormatException,你直接把循环的退出标志设为true,导致循环直接终止,自然没法让用户重新输入。另外还有个小疏漏:你原来的有效范围判断是>0 && <100,漏掉了0和100这两个合法边界值(需求明确是0-100的数字都有效)。
关键修改点
- 移除退出逻辑,替换为错误提示:遇到非数字输入时,不要终止循环,而是打印和数字无效时一致的错误提示,让用户重新输入。
- 修正有效范围判断:把条件改成
>=0 && <=100,包含0和100这两个合法值。 - 优化冗余解析:把解析后的数字存为变量,避免反复调用
Double.parseDouble(input),代码更高效清晰。
修改后的完整代码
import java.util.Scanner; public class GradeAverage { private static final int SIZE = 5; // 可根据需求调整SIZE的数值 public static void main(String[] args) { int count = 0; double[] aGrade = new double[SIZE]; Scanner scan = new Scanner(System.in); double total = 0; while (count < SIZE) { // 去掉多余的exit标志,直接用count判断循环条件 System.out.print("Enter number " + (count + 1) + ": \n"); String input = scan.nextLine(); try { double grade = Double.parseDouble(input); // 仅解析一次并存储为变量 if (grade >= 0 && grade <= 100) { // 修正有效范围,包含边界值 aGrade[count] = grade; count++; } else { System.out.println("That wasn't a valid percentage, I need a number between 0-100. Try again."); } } catch (NumberFormatException nfe) { // 非数字输入时打印错误提示,不终止循环 System.out.println("That wasn't a valid percentage, I need a number between 0-100. Try again."); } } // 打印输入结果与平均值 System.out.println("\nNumber of grades entered: " + count); for (int i = 0; i < count; i++) { System.out.println("Grade " + (i + 1) + ": " + aGrade[i]); } for (double grade : aGrade) { // 用增强for循环简化求和逻辑 total += grade; } System.out.println("\nAverage grade: " + total / count); scan.close(); // 记得关闭Scanner资源 } }
测试验证
- 输入负数(如-10)、大于100的数(如105)、非数字字符串(如abc):都会打印错误提示,循环继续等待用户重新输入。
- 输入0、50、100这类合法值:会被正常存入数组,
count递增。 - 直到输入满
SIZE个有效数字后,循环终止,自动打印所有成绩和平均值。
这样就完全符合你的需求啦!
内容的提问来源于stack exchange,提问作者LMF
相关产品推荐
相关产品推荐

