为何for循环中整数变量count无法递增?质数程序调试求助
质数判断程序中count始终为0的问题解决
给你梳理几个最可能的原因和对应的修复方法:
常见问题1:条件判断写反
你可能把判断因数的条件写反了——本来要找能整除目标数的因数(num % i == 0),结果写成了num % i != 0,导致只有不能整除的时候才触发count递增。对于质数来说,这个条件会频繁触发,但如果你的循环没覆盖到1和目标数本身,最终count还是会保持0。
错误示例:
int num = 5; int count = 0; for (int i = 2; i < num; i++) { if (num % i != 0) { // 条件写反,永远不会触发count递增 count++; } } System.out.println(count); // 输出0
修正:把条件改成num % i == 0,找到因数时才递增count。
常见问题2:循环范围没覆盖到因数
如果你的循环只从2遍历到num-1,且初始count没预设1和目标数本身的话,对于质数来说,这个区间内找不到任何因数,count自然一直是0。
错误示例:
int num = 7; int count = 0; // 只遍历2到6,质数7在这个区间没有因数,count保持0 for (int i = 2; i < num; i++) { if (num % i == 0) { count++; } }
修正方案有两种:
- 循环从1遍历到num,统计所有因数:
int num = 7; int count = 0; for (int i = 1; i <= num; i++) { if (num % i == 0) { count++; } } // 质数的因数只有1和自身,所以count等于2时就是质数 if (count == 2) { System.out.println(num + "是质数"); } else { System.out.println(num + "不是质数"); }
- 初始count设为2(代表1和自身两个因数),循环从2遍历到
sqrt(num),找到因数就递增count:
int num = 7; int count = 2; // 预设1和自身两个因数 for (int i = 2; i <= Math.sqrt(num); i++) { if (num % i == 0) { count++; // 如果i和num/i不是同一个数,还要多算一个因数 if (i != num / i) { count++; } } } if (num <= 1) { System.out.println(num + "不是质数"); } else if (count == 2) { System.out.println(num + "是质数"); } else { System.out.println(num + "不是质数"); }
常见问题3:count初始化位置错误
如果你把int count = 0;写在了循环内部,每次循环都会重新创建count并赋值为0,最终输出的自然是0(甚至会因作用域问题报错)。
错误示例:
int num = 5; for (int i = 1; i <= num; i++) { int count = 0; // 每次循环都重置为0 if (num % i == 0) { count++; } } System.out.println(count); // 作用域错误,无法输出
修正:把count的定义和初始化放在循环外面。
内容的提问来源于stack exchange,提问作者HRISHIKESH DEY
相关产品推荐
相关产品推荐

