我在Project Euler中解决了关于Prime的问题3。我在java编码,但我得到了关于死代码的错误。 这是代码:
public class Prime {
public int isPrime(int n){
if (n==2)
return 1;
else
{
for(int i = 2; i <= (int) Math.sqrt(n) ; i++)
{
if (n % i == 0)
{
return 0;
}
else return 1;
}
}
return 1;
}
谁告诉我为什么原因是什么?谢谢!
答案 0 :(得分:1)
你的for循环中有问题。要解决此问题,您应该将for循环更改为以下内容:
for(int i = 2; i <= (int) Math.sqrt(n) ; i++)
{
if (n % i == 0)
{
return 0;
}
}
这样做的原因是因为你构建for循环的方式,它只会经历一次而且只经过一次。那是因为if (n % i != 0)
然后你返回1
并且for循环终止。你想要做的是等到循环遍历整个序列,然后返回1。
您在i++
下收到警告的原因是,如上所述,由于循环只迭代一次,因此永远不会增加i
。
PS:在方法内返回会破坏它所在的循环。
答案 1 :(得分:1)
你永远不会到达结束返回1;
循环将在第一次迭代时返回
这更简单,更有效
class Prime {
public int isPrime(int n) {
for (int i = 2; i <= (int) Math.sqrt(n); i++) {
if (n % i == 0) {
return 0;
}
}
return 1;
}
}