Soluzione 5.1

La scrittura di questa classe di collaudo non dovrebbe comportare particolari difficolta`. La relizzazione di un menu a scelta multipla di comandi e` simile a quella proposta nell'esercizio 5 del laboratorio 4 (questa volta abbiamo gestito -ed importato- anche l'eccezione NoSuchElementException, lanciata da next() quando non viene trovato un token).
import java.util.Scanner;
import java.util.NoSuchElementException;

public class ArrayAlgsTester
{
    public static void main(String[] args)
    {
        Scanner in = new Scanner(System.in);

        // --------------------- creazione array --------------------
        boolean done = false;
        int l=0; int m=0;
        while (!done)
        {
            try
            {
                System.out.println("Lunghezza dell'array?");
                l = Integer.parseInt(in.nextLine());
                System.out.println("Massimo possibile valore nell'array?");
                m = Integer.parseInt(in.nextLine());
                if( l > 0 && m > 0 )
                    done = true;
                else
                    System.out.println("Devono essere interi positivi");
            }
            catch (NumberFormatException e)
            { System.out.println("Non hai inserito numeri interi"); }    
        }

        int[] a = ArrayAlgs.randomIntArray(l, m);
        int aSize = a.length;
        System.out.println("Array creato:\n" + ArrayAlgs.printArray(a,aSize));
        System.out.println("Val. minimo: " + ArrayAlgs.findMin(a,aSize));
        System.out.println("Val. massimo: " + ArrayAlgs.findMax(a,aSize));


        //------------------- manipolazione array ------------------------

        done = false;
        while (!done)
        {
            System.out.println("\n*******************************************");
            System.out.println("* Comando?");
            System.out.println("* Q termina\n* P stampa l'array");
            System.out.println("* M calcola il max\n* m calcola il min");
            System.out.println("* r < index > rimuove in index");
            System.out.println("* R < index > rimuove ordinatamente in index");
            System.out.println("* I < index> < value > inserisce valore");
            System.out.println("  value in index");
            System.out.println("*******************************************\n");

            String commLine = null;
            if (!in.hasNextLine() ||    
                (commLine = in.nextLine()).equalsIgnoreCase("Q"))
            {
                done = true;
                System.out.println("Arrivederci");
            }
            else
            {
                Scanner toks = new Scanner(commLine);
                if (toks.hasNext())
                {
                    String cmd = toks.next();

                    //stampa l'array
                    if (cmd.equalsIgnoreCase("P") )
                        System.out.println("array: " + 
                                                 ArrayAlgs.printArray(a,aSize));
                    //calcola il minimo
                    else if ( cmd.equals("m") )
                        System.out.println("Valore minimo: " 
                                                  + ArrayAlgs.findMin(a,aSize));
                    //calcola il massimo
                    else if ( cmd.equals("M") )
                        System.out.println("Valore Massimo: "
                                                  + ArrayAlgs.findMax(a,aSize));
                    //rimuove elemento senza/con ordinamento
                    else if(cmd.equalsIgnoreCase("R") )
                    {   try
                        {
                            int i = Integer.parseInt(toks.next());
                            if (i>=0 && i < aSize)
                            {
                                if(cmd.equals("r")) ArrayAlgs.remove(a,aSize,i);
                                else ArrayAlgs.removeSorted(a,aSize,i);
                                aSize--;
                                System.out.println("Rimosso elemento: " + 
                                    ArrayAlgs.printArray(a,aSize));
                            }
                            else
                                System.out.println("Indice fuori range");
                        }
                        catch (NoSuchElementException e)
                        { System.out.println("Formato: r (opp. R) < index >");}
                        catch (NumberFormatException e)
                        { System.out.println("Non hai inserito un intero");}    
                    }
                    //inserisce un elemento
                    else if(cmd.equalsIgnoreCase("I") )
                    {   try
                        {
                            int i = Integer.parseInt(toks.next());
                            int value = Integer.parseInt(toks.next());
                            if (i >=0 && i <= aSize)
                            {
                                a = ArrayAlgs.insert(a,aSize,i,value);
                                aSize++;
                                System.out.println("Inserito elemento: " + 
                                    ArrayAlgs.printArray(a,aSize));
                            }
                            else
                                System.out.println("Indice fuori range");
                        }
                        catch (NoSuchElementException e)
                        { System.out.println("Formato: I < index > < value >");}
                        catch (NumberFormatException e)
                        { System.out.println("Non hai inserito un intero");}    
                    }
                } // fine dell' if(toks.hasNext())
            }  // fine del corpo dell'else
        }  // fine del ciclo while
    } // fine del corpo del metodo main
} // fine del corpo della classe