You need to enable JavaScript to run this app. Java数值统计程序输入负数触发ArithmeticException除零异常求助
优惠活动
大模型
产品
解决方案
定价
更多

Java数值统计程序输入负数触发ArithmeticException除零异常求助

代码问题排查与修复

直接触发异常的根因

报错栈指向的/ by zero异常,来自代码第29行的平均值计算语句。该位置的count变量在整个程序流程中从未执行自增操作,分母始终为初始值0,直接触发整数除零异常。

全部逻辑错位问题梳理

  • 循环终止判断逻辑完全失效:
    读取输入值后,代码额外执行了next++操作才判断值是否为负数。原本的终止规则是“输入负数即停止”,这步自增会篡改输入值:比如用户输入-1作为终止标记,自增后变成0,永远无法满足<0的判断条件,循环永远不会正常终止;如果用户输入-2作为终止标记,自增后变成-1,不仅篡改了用户输入的统计值,判断逻辑也完全偏离设计初衷。
  • 统计逻辑位置完全错位:
    有效数字的计数、最值更新本该在循环内每读一个数时实时执行,原代码将最值判断、重复累加求和的逻辑全部放到循环外部,导致所有正常输入的数字根本不会被统计,最后只会拿循环退出时的最后一个输入值做比较,结果完全错误。
  • 统计范围包含无效值:
    用来终止循环的负数本不该参与总和、最大值、最小值的计算,原代码在循环外重复将该负数累加到总和中,还拿它参与最值比较,哪怕解决了除零问题,输出的统计结果也是错的。

修正后的可运行代码

import java.util.*;

public class AverageMinMax {
    public static void main(String[] args) {
        Scanner keyboard = new Scanner(System.in);
        double average;
        int count = 0, sum = 0, next;
        int max = Integer.MIN_VALUE;
        int min = Integer.MAX_VALUE;
        System.out.println("Please enter the numbers you wish to evaluate:");
        System.out.println("Followed by a negative number to stop input");
        
        do {
            next = keyboard.nextInt();
            // 碰到负数直接终止循环,不参与统计
            if (next < 0) {
                break;
            }
            // 有效数字实时统计
            count++;
            sum += next;
            if (next > max) {
                max = next;
            }
            if (next < min) {
                min = next;
            }
        } while (true);
        
        // 处理无有效输入的边界,避免再次除零
        if (count == 0) {
            System.out.println("未输入有效数字,无法计算统计结果");
            return;
        }
        average = (double) sum / count;
        System.out.println("Your average is: " + average);
        System.out.println("Your maximum number is: " + max);
        System.out.println("Your minimum number is: " + min);
    }
}

修正点说明

  • 删除了无意义的next++篡改输入值的操作,将负数判断前置,碰到终止值直接跳出循环,不进入后续统计流程
  • 将计数、求和、最值更新逻辑全部移到循环内部,每读取一个有效数字就实时更新统计值
  • 增加了无有效输入的边界判断,避免用户启动程序后直接输入负数时再次触发除零异常
  • 移除了绕弯的areMore布尔判断,直接用break实现终止逻辑,减少逻辑错位的可能

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.03 05:54:04