我不太确定我的代码有什么问题,似乎大多数事情都会出现问题。
public static char isPrime(int x)
{
char result = 'r';
for(int y=2;y<x;y++)
{
if(x%y==0)
result = 't';
else
result = 'f';
}
return result;
}
答案 0 :(得分:4)
您总是要循环结束,因此结果将是x-1
。
您需要从result = 't'
开始,然后跳出false
值的循环。
答案 1 :(得分:3)
当你这样切换时,你会抛弃以前的所有结果。
假设它是素数,直到找到复合数
public static char isPrime(int x)
{
char result = 't';
for(int y=2;y<x;y++)
{
if(x%y==0)
{
result = 'f';
break;
}
}
return result;
}
答案 2 :(得分:2)
public static char isPrime(int x)
{
char result = 't';
for(int y=2;y<x;y++)
{
if(x%y==0) {
result = 'f';
break;
}
}
return result;
}
答案 3 :(得分:2)
试试这个:
public static boolean isPrime(int x) {
for (int y = 2; y*y <= x; y++) {
if (x % y == 0)
return false;
}
return true;
}
改变了什么:
't'
和'f'
。if (x%y==0)
),就必须突破循环,因为此时我们'确保数字不是素数,所以继续true
答案 4 :(得分:1)
您应该break
或return
,在您发现自己的号码不是主要的,简单的那样。此外,当数字不是素数时,您似乎返回t
。
答案 5 :(得分:1)
请使用boolean并提供Junit测试用例,以便我们知道您的期望。
public static boolean isPrime(int x)
{
for(int y=2;y<x;y++)
{
if(x%y==0)
return false;
}
return true;
}
答案 6 :(得分:0)
你的真假被颠倒了,如果它完全可以通过它不是主要的东西来分裂
此外,你通过循环覆盖每次运行时的所有旧数据,只要任何东西完全可分,然后它就不是素数,那时返回false
另外,你有没有考虑过使用布尔真假?
答案 7 :(得分:0)
您的方法无法解析素数。如果数字只能被一个或它自己分割,则数字是素数。
例如,如果我在方法中输入17,则结果将在y == 16时设置为'f',这将是返回的结果。但是,17是素数。
你应该尝试像
这样的东西for (int i = 2; i < x; i++) {
if (x % y == 0) return false;
}
return true;