使用Eclipse,Java
尝试制作检查数字是否为素数的方法(方法可以由1和自己分开)或不用
目前创建了一些功能(下面的代码)。此代码返回所需的结果,但不是所有素数的数字,对于数字33和55的意思是它返回false
而不是true
。
代码
private static void numberCheker() throws IOException {
System.out.println("Enter number - ");
int number;
number = getNumber();
boolean result = true;
if ((number % 2 == 0) && (number != 2)) {
System.out.println("Not");
} else if (number == 1) {
System.out.println("1 not a valid number");
} else if (number == 2)
System.out.println("Simple");
else {
for (int i = 2; i < number + 1; i++) {
if (number % i == 0) {
result = false;
} else
result = true;
}
if (result = true)
System.out.println("Simple");
else
System.out.println("not Simple");
}
}
问题 - 我在“逻辑”中犯了错误 - 花了几个小时来修复 - 但是不能这样做。有什么建议吗?
结果必须如下
Enter number -
1
simple
Enter number -
2
simple
Enter number -
3
simple
Enter number -
4
not simple
Enter number -
5
simple
...
但我得到了
Enter number -
33
not simple - **WRONG**
Enter number -
55
not simple - **WRONG**
修改
非常感谢所有人 试着像Michael Konietzka一样伤心: private static boolean numberCheker() throws IOException {
System.out.println("Enter number - ");
int number = getNumber();
for (int i=2;i<number;i++)
{
if (number%i==0) return false;
}
return (number>1);
}
和getNumber()
public static int getNumber () throws IOException{
int temp;
try{
BufferedReader bReader = new BufferedReader (new InputStreamReader(System.in));
String resultReader = bReader.readLine();
temp = Integer.parseInt(resultReader);
return temp;
}
catch (NumberFormatException failDescription){
System.out.println(failDescription);
return 0;
}
}
现在它的工作完美无缺 谢谢你的帮助!
答案 0 :(得分:3)
我不确定简单数字
的定义是什么但这可能是个问题
if (result=true)
更改为
if (result)
编辑您还需要修复其他人提到的漏洞。
答案 1 :(得分:2)
if (result=true)
我认为你的意思是双等号:
if (result==true)
当你说if(result = true)时,此语句将始终返回true。
编辑:您还需要修复for循环中的if-else内容。见Mr.Me的回答。
答案 2 :(得分:2)
您可以将支票放在班级的静态方法中:
public static boolean isPrime(final int n)
{
for (int i=2;i<n;i++)
{
if (n%i==0) return false;
}
return (n>1);
}
你必须通过从2到n-1的所有数字进行迭代并检查,如果n可以被i整除而没有余数。如果是这样,该方法可以立即返回false,因为找到了一个因子。如果在2和n-1之间没有找到因子且数字大于1则它是素数;该方法返回true。
要使用此方法,您可以通过这种方式使用它,例如:
public static void main (String[] args)
{
for (int i=1;i<10;i++)
{
System.out.println(i+": "+isPrime(i));
}
将输出
1:假
2:是的
3:是的
4:假
5:是的
6:错误
7:是的
8:假
9:假
答案 3 :(得分:1)
问题是,当你发现数字不是素数时,你不会突破循环,解决这个问题只是添加,中断;在你的if语句之后......这是代码:
if (number%i==0){
result=false;
break;
}
修改强>
此外,您需要修复if语句,因为@Smit建议
答案 4 :(得分:0)
3是素数,但3的倍数不是素数,同样适用于5等。质数的倍数不是素数。只有这么多优质的nos。没有为设计质数而制定明确的规则,我怀疑你是否会这样做。 素数否是一个不在集合2n n 3n中的数字,只能由它自身和1分割。
答案 5 :(得分:0)
2个问题 1 - 你需要在假的时候添加一个中断 2 - 需要在最后更改if
if (result=true)
到
if (result)
public static void main(String[] args) {
System.out.println("Enter number - ");
int number = 55;
boolean result = true;
if ((number%2==0) && (number!=2) ){
System.out.println("Not");
}
else if (number ==1){
System.out.println("1 not a valid number");
}
else if (number ==2)
System.out.println("Simple");
else{
for (int i=2; i<number;i++){
if (number%i==0){
result=false;
break;
}
else
result = true;
}
if (result)
System.out.println("Simple");
else
System.out.println("not Simple");
}
}
}
答案 6 :(得分:0)
您的错误在循环终止。
通过循环直到数字+ 1,该数字最终将被自身分割,剩余部分为0,因此每个数字看起来都不是素数。
循环直到数字/ 2(sqrt(数字)会更有效,但代码的质量表明这不是一个问题)
如果在检测到余数为零时循环,则必须中断。
答案 7 :(得分:0)
我建议您查看一个名为Erathosthenes的Sieve算法:http://en.wikipedia.org/wiki/Sieve_of_Eratosthenes
创建素数列表是一个非常简单的算法,它将帮助您了解如何确定数字是否为素数。
顺便说一句 - 别忘了排除负数!