Prime#program识别错误素数

时间:2015-03-11 01:39:19

标签: loops testing input numbers static-methods

程序只需要输入一个用户输入并说明它是否为素数,然后它应该询问他们是否要再次这样做直到他们不想这样做。
这是我到目前为止所做的:

import java.util.*;

public class PrimeOrNot

{


public static void main (String[] args)
    {
        Scanner scan = new Scanner (System.in);

    int n = 0;
    String reply;
    char doAgain = 'Y';
    boolean valid = false, isPrime = true;

    Welcome();


    do
    {
    System.out.print("Enter a whole number: ");
    n = scan.nextInt();

    if(PrimeTest(n))
        System.out.println(n + " is a prime number!");
    if(!PrimeTest(n))
        System.out.println(n + " is not a prime number!");

        //Asks the user to try again until they enter a valid
        //response of Y or N
        while(!valid)
        {
        System.out.print("Try another number? (Y/N): ");
        reply = scan.next().toUpperCase();
        doAgain = reply.charAt(0);
        System.out.println();

        if(doAgain == 'Y' || doAgain == 'N')
            valid = true;
        else
            System.out.println("Please type 'Y' or 'N'.");
        }
    }while(doAgain != 'N');


    Goodbye();
}

/*----------------------------------------------------------*/
/********************STATIC METHODS BELOW********************/
/*----------------------------------------------------------*/

/****************************************/
//Welcome method...a welcoming 'graphic'//
/****************************************/
    public static void Welcome()
    {
        System.out.println("=============");
        System.out.println("Prime or Not");
        System.out.println("=============");
        System.out.println();
    }

/****************************************************/
//PrimeTest determines if the number is prime or not//
/****************************************************/
    public static boolean PrimeTest(int n)
    {
        boolean isPrime = true;

    if(n > 0)
    {
        for(int x = 2; x <= Math.sqrt(n); x++)
        {
            if(n % 2 == 0)
                isPrime = false;
            else if(n % x == 0)
                isPrime = false;
            else
                isPrime = true;
        }
    }
    else
        System.out.println("Please enter a positive integer.");

    return isPrime;
}

/****************************************/
//Goodbye method...a departing 'graphic'//
/****************************************/
    public static void Goodbye()
        {
            System.out.println("===============");
            System.out.println("Try again soon!");
            System.out.println("===============");
            System.out.println();
        } 

}  

这是发生了什么。我会输入一个数字,它会回答大多数错误。然后,当我按Y做另一个时,它只是让我输入数字并告诉我它是否是素数,并且永远不会问我是否真的想继续前进。我完全不知道如何解决这两个问题。

1 个答案:

答案 0 :(得分:3)

你的主要考试不会起作用,因为即使你已经认识到它不是一个素数,你仍然会继续测试。一旦你找到一个除数,那么你应该将isPrime设置为false并打破循环。不要在下次测试中将其设置为true!此外,您不需要对n%2进行单独测试,因为您将在x = 2时进行测试。

for(int x = 2; x <= Math.sqrt(n); x++)
{
    if(n % x == 0)
    {
        isPrime = false;
        break;
    }
}

调用该函数时,只调用一次并将结果保存为布尔值:

boolean result = PrimeTest(n);
if(result)
    System.out.println(n + " is a prime number!");
if(!result)
    System.out.println(n + " is not a prime number!");

您的提示不起作用,因为在第二次询问之前您没有将有效重置为false:

valid = false;
while(!valid)