【发布时间】:2016-12-20 16:15:28
【问题描述】:
所以我正在为 java 中的 codeeval 编写一个 mersense 脚本来练习该语言(我对它相当陌生)。在某一时刻,我正在检查数字是否为素数,并在我的方法中进行正常检查,一切看起来都很棒
public static boolean isPrime (int testValue){
if (testValue < 4){
return true;
} else if (testValue % 2 == 0){
return false;
} else {
for (int I = 1; I < Math.sqrt (testValue); I++){
if (testValue % I == 0 ){
return false;
}
}
return true;
}
}
然而,唯一通过的事情似乎是 1 和 3。我不能在 for 循环之后返回,这是怎么回事?有什么想法吗?
编辑:
这里是完整的代码:
import java.io.*;
import java.lang.Math;
public class Main{
public static void main(String[] args) throws IOException {
File file = new File(args[0]);
BufferedReader buffer = new BufferedReader(new FileReader(file));
String line;
int n;
StringBuilder result = new StringBuilder();
int candidate;
while((line = buffer.readLine()) != null){
n = Integer.parseInt(line.trim());
for(int i = 1; i < n; i++){
candidate = mersenne(i);
if(isPrime(candidate)){
System.out.println(candidate + " "+ isPrime(candidate));
if((i+1) >= n){
result.append(candidate);
}else{
result.append(candidate + ", ");
}
}
}
System.out.println(result.toString());
result = new StringBuilder();
}
}
public static int mersenne (int testValue){
return (int)Math.pow(2,testValue) - 1;
}
public static boolean isPrime(int testValue){
if(testValue < 4 && testValue > 1){
return true;
}else if(testValue % 2 == 0){
return false;
}else{
for(int i = 3; i <= Math.sqrt(testValue); i++){
if(testValue % i == 0){
return false;
}
}
return true;
}
}
}
【问题讨论】:
-
你所说的“唯一能通过的东西”是什么意思?如,
n以上 3 为isPrime(n)返回 false? -
testValue % 1 == 0始终为真。使用调试器很容易发现这种错误。 -
除此之外:按照惯例,您通常在
for循环中使用小写的i -
您还可以通过删除所有
elses使代码更简洁。当 if 语句块总是以return结尾时,控制权立即返回到调用代码,之后不会执行任何操作(finally块除外)。所以else是不必要的,它只会使代码更难阅读(尤其是没有适当的缩进)。 -
@discipline 是的,看来我得到的任何输入的唯一输出是 1,3,如果有帮助,我还添加了整个类
标签: java return conditional