Java - 查找 - 素数与否

时间:2013-02-04 20:29:34

标签: java eclipse

使用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;
}

}

现在它的工作完美无缺 谢谢你的帮助!

8 个答案:

答案 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

创建素数列表是一个非常简单的算法,它将帮助您了解如何确定数字是否为素数。

顺便说一句 - 别忘了排除负数!