Soluzione 4.1

La classe SequenceAnalyzer modificata. Notare la condizione che rende "true" la variabile done. Come funziona quella condizione? Ricordarsi della valutazione pigra degli operatori booleani.
import java.util.Scanner;

public class SequenceAnalyzer
{
    public static void main(String[] args)
    {
        double sum = 0;
        double sumSquares = 0;
        int count = 0;

        Scanner in = new Scanner(System.in);
        boolean done = false;

        while (!done)
        {
        System.out.println("Inserire numero (Q per terminare sequenza):");
        String newInput;
        if (!in.hasNextLine()||(newInput=in.nextLine()).equalsIgnoreCase("Q"))
            done = true;
        else
        {
            try
            {
                double newNumber = Double.parseDouble(newInput);
                sum += newNumber;
                sumSquares += newNumber * newNumber;
                count++;
            }
            catch (NumberFormatException e)
            {
                System.out.println("Input non valido!");
            }
        }
        }

        double avrg = 0;
        double stdev = 0;
        if (count > 0)
        {  
            avrg = sum / count;
            if (count == 1)
                stdev = 0;
            else
                stdev = Math.sqrt((sumSquares - sum*sum/count) / (count - 1));
        }

        System.out.println("Hai inserito " + count + " elementi.");
        System.out.println("La media e`: " + avrg);
        System.out.println("La dev. standard e`: " + stdev); 
    }
}

La classe LeapYearTester modificata. Il meccanismo di gestione delle eccezioni e` analogo a quello della classe SequenceAnalyzer
import java.util.Scanner;

public class LeapYearTester
{
    public static void main(String[] args)
    {
        Scanner in = new Scanner(System.in);
        boolean done = false;
        while (!done)
        {
            System.out.println("Inserire anno (0 per uscire):");
            String input;
            if (!in.hasNextLine() || (input=in.nextLine()).equals("0"))
                done = true;
            else
            {
                try
                { 
                    int year = Integer.parseInt(input); 
                    if (year < 0)
                        System.out.println("Deve essere un intero positivo...");
                    else if ( (year % 4 == 0) && !( (year > 1582) && 
                         (year % 100 == 0) && (year % 400 != 0) ) )
                        System.out.println("E` bisestile!!");
                    else
                        System.out.println("Non e` bisestile...");
                }
                catch (NumberFormatException e)
                { System.out.println("Deve essere un numero intero!"); }
            }
        }
    }
}