You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何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. 循环从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 + "不是质数");
}
  1. 初始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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 14:16:10