Prime #程序识别假素数

Prime # program identifying false primes

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

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 做另一个时,它只是让我输入数字并告诉我它是否是质数,并且永远不会问我是否真的想继续前进。我完全不知道如何解决这两个问题。

你的质数测试不会起作用,因为即使你已经认识到它不是质数,你仍然继续测试。一旦找到一个除数,就应该将 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!");

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

valid = false;
while(!valid)