Java质数判断while循环出现除以零(/ by zero)异常求助
质数判断代码的除以零异常分析与解决
问题描述
我编写了一段使用while循环判断质数的Java代码,运行时能正常输出判断结果,但最终会抛出「Exception in thread "main" java.lang.ArithmeticException: / by zero」异常。我特意将just_number += 1放在循环开头试图解决该问题,但并未成功。代码如下:
Scanner new_input = new Scanner(System.in); int number = new_input.nextInt(); boolean True = true; int just_number = 0; int sum = 0; while (True){ just_number += 1; if (number % just_number == 0){ sum += 1; if (just_number == number && sum == 2){ System.out.println(number + " is prime number"); } else if(just_number == number && sum != 2){ System.out.println(number + " isn't prime number"); } } else{ continue; } }
异常原因
核心问题是无限循环未终止:你用了while(True)死循环,哪怕已经输出了判断结果,循环依然会持续执行。just_number会一直递增,直到触发int类型的溢出——当just_number达到Integer.MAX_VALUE后再加1,会变成Integer.MIN_VALUE(负数),继续递增最终会回到0,此时执行number % just_number就会抛出除以零的算术异常。
修正方案
解决的关键是在输出结果后终止循环,同时可以优化质数判断的逻辑,提升效率。以下是修正后的代码:
import java.util.Scanner; public class PrimeChecker { public static void main(String[] args) { Scanner newInput = new Scanner(System.in); int number = newInput.nextInt(); newInput.close(); // 处理特殊情况:小于2的数都不是质数 if (number < 2) { System.out.println(number + " isn't prime number"); return; } boolean isPrime = true; int justNumber = 2; // 只需遍历到平方根,减少循环次数 while (justNumber <= Math.sqrt(number)) { if (number % justNumber == 0) { isPrime = false; break; // 找到因数直接终止循环 } justNumber++; } System.out.println(number + (isPrime ? " is prime number" : " isn't prime number")); } }
修正说明
- 移除死循环,改为遍历到
Math.sqrt(number),一旦找到因数立即跳出循环,避免无效计算 - 单独处理小于2的输入(1、0、负数),这类数本身就不是质数
- 规范变量命名,符合Java编码习惯
- 关闭Scanner输入流,避免资源泄漏
- 简化判断逻辑:默认假设是质数,找到因数则标记为非质数,代码更简洁易读
内容的提问来源于stack exchange,提问作者Nox
相关产品推荐
相关产品推荐

