2015-03-11 4 views
1

Программа просто должна взять пользовательский ввод и сказать, является ли он простым или нет, тогда он должен спросить их, хотят ли они сделать это снова, пока они этого не захотят.
Вот что я до сих пор:Программа Prime #, идентифицирующая ложные простые числа

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, чтобы сделать другое, он просто заставляет меня вводить цифры и говорить мне, если это просто или нет, и никогда не спросит меня, хочу ли я продолжать идти. Я абсолютно не знаю, как исправить любую проблему.

ответ

3

Ваш основной тест не будет работать, потому что вы продолжаете тестирование даже после того, как узнаете, что он не является простым. Как только вы найдете хотя бы один делитель, вы должны установить isPrime в false и выйти из цикла. Не устанавливайте значение true в следующем тесте! Кроме того, вам не нужен отдельный тест на п% 2, так как вы будете проверять, что при х = 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; 
while(!valid) 
Смежные вопросы