使用while循环打印质数未达预期,变量j未重置引发输出异常
素数输出代码的问题分析与修复
问题现象
这段代码本意是输出2到5之间的素数(预期输出2、3、5),但实际仅输出2。
问题根源
- 变量
j未重置:j在外层循环外定义,第一次内层循环结束后j的值变为3。后续i递增到3、4、5时,j已经大于当前i,内层while循环直接终止,无法对后续数字进行因数判断。 - 变量
count未重置:count同样在外层循环外定义,第一次统计完2的因数后count值为2,后续没有重置,导致后续数字的判断逻辑完全失效。
原代码
public static void main(String[] args) { int i=2; int j=1; int count=0; while(i<=5) { while(j<=i) { if(i%j==0) { count++; } j++; } if(count==2) System.out.println(i); i++; } }
修复后的代码
将j和count的定义移至外层循环内部,确保每次迭代新的i时,这两个变量都被重置为初始值:
public static void main(String[] args) { int i=2; while(i<=5) { int j=1; int count=0; while(j<=i) { if(i%j==0) { count++; } j++; } if(count==2) System.out.println(i); i++; } }
修复逻辑说明
每次检查新的数字i时,重新初始化j=1(从1开始判断因数)和count=0(重置因数计数器),内层循环正常遍历1到i的所有数字,统计因数个数。当count=2时,说明该数字只有1和自身两个因数,即为素数,执行输出操作。
内容的提问来源于stack exchange,提问作者Murali7373
相关产品推荐
相关产品推荐

