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