Java程序除零错误求助:随机数统计功能异常
解决Java程序的除零错误及逻辑问题
问题根源拆解
你的程序触发除零异常,同时存在循环逻辑、需求理解的多重问题:
- 循环条件错误:原代码
for (int i = 0; i == N-1; i++)仅在N=1时执行一次,其余情况循环体完全不运行。导致nNeg、nPos等统计变量始终为0,后续计算必然触发除零异常。 - 冗余变量与逻辑偏差:用
contador统计数字数量完全多余,输入的N就是总数;另外需求中的「正数占比」是指正数个数占总数量的比例,原代码错误使用正数总和计算,不符合需求。 - 未处理边界情况:即使循环正常运行,若生成的随机数中没有负数,
nNeg仍为0,计算平均值时还是会触发除零异常。
修正后的完整代码
import java.util.Random; import java.util.Scanner; public class Main { public static void main(String[] args) { Random random = new Random(); Scanner ler = new Scanner(System.in); int nPos = 0, nNeg = 0, totalNeg = 0; int N; double mediaNeg, percPos; System.out.println("Insira o número de números que pretende inserir: "); N = ler.nextInt(); // 修正循环条件,确保生成N个随机数 for (int i = 0; i < N; i++) { int num = random.nextInt(101) - 50; System.out.println(num); if (num > 0) { nPos++; } else if (num < 0) { nNeg++; totalNeg += num; } // 0既不归类为正数也不归类为负数 } // 处理无负数的边界情况,避免除零 if (nNeg == 0) { System.out.println("Média dos negativos = 未生成负数,无法计算平均值"); } else { mediaNeg = (double) totalNeg / nNeg; System.out.println("Média dos negativos = " + mediaNeg); } // 修正正数占比逻辑:用正数个数除以总数量计算百分比 if (N == 0) { System.out.println("Percentagem dos positivos = 未生成数字,无法计算占比"); } else { percPos = (double) nPos / N * 100; System.out.println("Percentagem dos positivos = " + percPos + "%"); } ler.close(); // 关闭Scanner,避免资源泄漏 } }
核心修正点说明
- 循环条件改为
i < N,保证严格执行N次,生成指定数量的随机数; - 移除冗余的
contador和totalPos变量,简化代码逻辑; - 增加边界判断,在无负数或无数字时给出友好提示,避免除零异常;
- 修正正数占比的计算逻辑,符合需求中「占比」的定义(个数比例而非总和比例)。
内容的提问来源于stack exchange,提问作者José Filipe Silva
相关产品推荐
相关产品推荐

