/* *************************************************************************
 * Ora introdurremo gli Array.
 * Un array e' un'insieme di elementi dello stesso tipo, cui e' possibile
 * accedere tramite un indice, che e' il numero dell'elemento, partendo da
 * zero. Per esempio con indice 0 si accede al primo elemento, con indice
 * 3 si accede al quarto elemento. Questi elementi possono essere delle
 * variabili INT,FLOAT, o di altro tipo.
 * Da notare che gli indici sono numeri interi non negativi, e vanno da
 * 0 a n-1, dove n e' il numero di elementi.
 * Gli indici possono essere variabili di tipo int, short, byte.
 * Agli array si da un nome a piacere, col quale identificheremo tutti gli
 * elementi (variabili) che lo compongono. In altre parole gli elementi
 * condividono lo stesso nome (quello dell'array).
 * Gli array in java sono degli oggetti, a differenza del C, ed esiste
 * un controllo su di essi, in modo da non poter scrivere oltre il loro
 * limite: se si tenta di accedere ad un array con un indice superiore
 * all'ultimo elemento si genera un'eccezione ArrayIndexOutOfBounds (indice
 * fuori dai margini). Essendo oggetti non basta dichiararli con:
 *
 * Tipo[] nome;              -> Esempio:    int[] mioarray;
 *
 * Ma occorre anche istanziarli, allocando memoria per essi, tramite
 * l'operatore "new", in questo modo:
 *
 * int[] mioarray = new int[10];
 *
 * In questo caso dichiariamo e allochiamo un array, composto da 10 interi,
 * di nome mioarray. Il suo indice andra' da 0 a 9.
 * Si puo' anche inizializzare subito:
 *
 * int[] mioarray = {35,21,28,123,321};
 *
 * Dichiarando i suoi elementi, si alloca come con l'operatore "new": questo
 * array avra' 5 elementi, con indice da 0 a 4.
 * Pre leggere e scrivere nell'array si usera' questa forma:
 *
 *      mioarray[0]=3;      * Metto nel primo elemento il valore 3 *
 *
 * Il numero che mettiamo tra parentesi quadre e' l'indice, ossia il numero
 * di elemento dell'array, partendo da 0.
 * Facciamo una prima prova con gli array.
 ************************************************************************* */

import java.io.*;         // Include le funzioni I/O standard di base.


class Jlez3a {            // Da qua inizia la classe Jlez3a

 public static void main(String args[])  // Definiamo il metodo Main.
 {                                       // Inizio del main()

    int[] prova = new int[4];   // Un array con 4 elementi interi, che
                                // quindi avra' indici da 0 a 3

    prova[0]=20;            // Mettiamo un 20 nel primo elemento dell'array

    System.out.println("\nChe valore metto nel secondo elemento?");

    int pippo = leggiInt();       // Chiamo il metodo "int leggiInt()"

    prova[1] = pippo;             // Copiamo pippo nel secondo elemento...

    pippo *= 2;                   // Equivalente a pippo = pippo*2

    prova[2] = pippo;             // Il terzo elemento vale pippo*2

    pippo = prova[0] + prova[1];

    prova[3] = pippo;            // Il quarto elemento e' uguale al primo
                                 // piu' il secondo

    System.out.println("\nIl primo elemento vale " + prova[0]);
    System.out.println("\nIl secondo elemento vale " + prova[1]);
    System.out.println("\nIl terzo elemento vale " + prova[2]);
    System.out.println("\nIl quarto elemento vale " + prova[3]);

 }               // Fine del metodo principale Main()


/* -------------------------------------------------------------------------
 * Ora definiamo un metodo chiamato leggiInt(), che in entrata non ha
 * parametri, e in uscita restituisce un numero intero immesso da tastiera.
 *    int leggiInt()
 * ----------------------------------------------------------------------- */

 public static int leggiInt()
 {
    try {
      DataInputStream leggilo = new DataInputStream(System.in);
      String stringa = leggilo.readLine();     // dichiaro e leggo stringa.
      return(Integer.valueOf(stringa).intValue());  // e la converto in int.
    }
    catch (Exception e) {
      System.out.println("Errore: " + e + " nella lettura da tastiera");
      System.exit(0);
      return(-1);        // Questo return serve solo perche' il metodo
                         // abbia un int di ritorno anche in caso di errore
    }
 }               // Fine di "int leggiInt()"


}            // Fine della classe Jlez3a