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

Java程序if-else条件执行异常:输入非数字时无法重新输入问题排查

问题分析与解决方案

嘿,我一眼就揪出问题根源了!你的程序输入非数字字符串就直接退出,核心原因是catch块里的exit = true;语句——一旦输入非数字触发NumberFormatException,你直接把循环的退出标志设为true,导致循环直接终止,自然没法让用户重新输入。另外还有个小疏漏:你原来的有效范围判断是>0 && <100,漏掉了0和100这两个合法边界值(需求明确是0-100的数字都有效)。

关键修改点

  1. 移除退出逻辑,替换为错误提示:遇到非数字输入时,不要终止循环,而是打印和数字无效时一致的错误提示,让用户重新输入。
  2. 修正有效范围判断:把条件改成>=0 && <=100,包含0和100这两个合法值。
  3. 优化冗余解析:把解析后的数字存为变量,避免反复调用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.01 01:57:32