测试数字是否为素数:
这是我的代码:
public static boolean isPrime(int x){
if(x<=1)
return false;
else if(x==2)
return true;
else {
for(int i=2; i<=x/2; i++){
if(x%i==0)
return false;
}
return true;
}
}
我的问题是:最后一个语句&#39;返回true&#39;,如果数字是素数,则没有错误返回,但如果数字不是素数,那么在for循环期间,将会有错误的回报。当循环结束时,程序执行下面的语句循环 - 'return true'。所以我想知道返回的true是否会覆盖for循环期间发生的返回false。 (虽然当我测试这段代码时,代码很适合测试一个数字是否为素数,但我不知道为什么)
答案 0 :(得分:5)
在return false
(或任何return语句)之后,该方法将返回而不执行任何其他操作,因此在这种情况下无法访问return true
,因此您的代码可以正常工作。 / p>
答案 1 :(得分:1)
为什么要在零开始迭代?
考虑i = 1
时会发生什么:
if(x % i == 0) // i = 1, so x % i will be zero
return false;
更重要的是,考虑i = 0
:
if(x % i == 0) // how would you define x % 0!?
在2开始迭代:
// ...
for(int i = 2; i <= x / 2; i++) {
if(x % i == 0)
return false;
}
return true;
// ...
答案 2 :(得分:0)
return语句使方法退出,所以如果&#34;返回false&#34;执行方法exit返回false并且返回true将永远不会被执行。
答案 3 :(得分:0)
return false
结束方法。当我们说return
时,这意味着“停止你正在做的事情并将这个值反馈给调用我们的方法。”
没有发生这种情况的案例
try
- finally
块,return
块的finally
块中抛出的任何try
语句或异常将覆盖返回的值。System.exit
,此方法永远不会返回,因此exit
调用后的任何语句都不会被执行。答案 4 :(得分:0)
if(x%i==0) return false;
如果这个条件成立,那么它将返回false并且在此之后不会执行任何操作
当上述条件为假时,它将返回true。