Soluzione 4.7

Notare che, come richiesto dall'esercizio, il programma non ha cicli dopo la fase di lettura del dato in ingresso. Osservare quale condizione viene utilizzata per verificare se un numero inserito e` primo oppure no.
Gestione delle eccezioni: abbiamo usato dei costrutti try/catch annidati. Il try/catch piu` esterno gestisce l'eventuale NumberFormatException lanciata da parseInt quando la stringa inserita dall'utente non e` interpretabile come un numero intero. Il try/catch/catch piu` interno gestisce le eccezioni di FactorGenerator: in particolare, se il numero inserito e` 1, allora il costruttore di FactorGenerator lancia una IllegalArgumentException e il programma la gestisce segnalando che 1 e` un numero primo.
import java.util.Scanner;

public class PrimeNumberTester
{
    public static void main(String[] args)
    {
        Scanner in = new Scanner(System.in);
        boolean done = false;
        while (!done)
        {
            System.out.println("Inserire intero positivo (Q per uscire)");
            String input = in.nextLine();
            if (input.equalsIgnoreCase("Q"))
                done = true;
            else
            {
                try
                {
                    int anIntValue = Integer.parseInt(input);
                    try
                    {
                        FactorGenerator generator = 
                            new FactorGenerator(anIntValue);
                        if (generator.nextFactor() == anIntValue)
                            System.out.println("E` un numero primo!");
                        else
                            System.out.println("Non e` un numero primo...");
                    }
                    catch (IllegalArgumentException e)
                    {  if (anIntValue == 1)
                            System.out.println("E` un numero primo!");
                       else
                            System.out.println("Non hai inserito un int >0");
                    }
                    catch (IllegalStateException e)
                    {
                       System.out.println("Non ci sono fattori");
                    }
                }
                catch (NumberFormatException e)
                { System.out.println("Non hai inserito un numero int"); }
            }
        }
    }
}