当我只寻找一个时,isPrime Method会给出多个回复吗?

时间:2015-03-04 03:35:51

标签: java methods

我可以完美地运行此代码,但它没有按预期运行。我尝试制作一个isPrime方法,但是我一直收到一个错误,我得到多个响应而不是预期的单个响应。

例如,如果我输入数字3,我将得到回复:

  

[号码]不是素数。

     

[数字]是素数。

如果我输入数字100,我会收到回复:

  

[数字]不是素数。

     

[号码]不是素数。

     

[数字]不是素数。

     

...

     

[数字]是素数。

我得到了#34;不是素数。"响应99次,第100次响应将是"是素数。"每隔一段时间,响应"就会成为主要的"会出现。

有人能让我知道是什么搞乱了吗?

import java.util.Scanner;

public class Chapter_8_13 {


  public static void main(String[] args){  
    Scanner keyboard = new Scanner(System.in);
    System.out.println("This program helps determine if a number is prime!");
    System.out.println("Enter a number: ");
    int num = keyboard.nextInt();

    for (int i = 2; i <= num; i++)
    {
      if (num % i == 0)
      {
        System.out.println(num + " is prime.");
      }
      else
      {
        System.out.println(num + " isn't prime.");
      }
    }
  }
}

3 个答案:

答案 0 :(得分:0)

实际上,你的算法是错误的。条件if (num % i == 0)仅表示num除以i(并且num不是素数)。

应该是:

boolean isPrime = true;
for (int i = 2; i <= Math.sqrt(num); i++)
    {
      if (num % i == 0)
      {
        isPrime = false;
        break;
      }
    }
if (isPrime) {
    System.out.println("is prime");
} else {
    System.out.println("isn't prime");
}

答案 1 :(得分:0)

num可被任何i整除时,您设置了一个标记。然后检查外部循环标志的值以查找其是否为素数

flag=0;
for (int i = 2; i < num; i++)
{
      if (num % i == 0)
      {
        flag=1;
        break;
      }
}

if(flag==1)
    System.out.println(num + " is prime.");
else
  System.out.println(num + " isn't prime.");

注意:您无需循环num次。 sqrt(num)就足够了。

答案 2 :(得分:0)

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        Scanner keyboard = new Scanner(System.in);
        System.out
                .println("This program helps determine if a number is prime!");
        System.out.println("Enter a number: ");
        int num = keyboard.nextInt();

        boolean isPrime = true;

        for (int i = 2; i < num; i++) {
            if (num % i == 0) {
                isPrime = false;
                System.out.println(num + " isn't prime.");
                break;
            }
        }
        if (isPrime)
            System.out.println(num + " is prime.");
    }
}