如何将Java素数判断方法中的for循环改写为while循环?
素数判断for改while循环错误分析
你的改写代码存在3处核心逻辑错误,和原for循环执行逻辑不一致:
- 循环内部写了
break语句,导致循环最多执行1次就强制退出,完全没有完成原for逻辑中遍历所有满足i² <=n的i值的要求 - 把
i++放在了整除判断逻辑之前,第一次做整除判断时i已经变成3,漏掉了原逻辑中i=2的判断步骤 - 把
n%i ==0的整除判断写在了while循环外部,原逻辑是每遍历一个i值都要做一次整除校验,只要有一个i能整除n就直接返回false
正确改写代码
static boolean isPrime(int n) { int i = 2; while (Math.pow(i, 2) <= n) { if(n % i == 0) return false; i++; } return true; }
额外优化建议
你可以把循环条件里的Math.pow(i, 2) <= n替换为i * i <= n,既可以避免浮点运算带来的精度问题,也能提升代码运行效率。
内容的提问来源于stack exchange,提问作者Pencelguy
相关产品推荐
相关产品推荐

