程序只需要输入一个用户输入并说明它是否为素数,然后它应该询问他们是否要再次这样做直到他们不想这样做。
这是我到目前为止所做的:
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做另一个时,它只是让我输入数字并告诉我它是否是素数,并且永远不会问我是否真的想继续前进。我完全不知道如何解决这两个问题。
答案 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)