/* *************************************************************************
 * Fino ad ora i nostri programmi sono stati visti come una sequenza di
 * istruzioni all'interno della funzione main().
 * Proviamo a raggruppare le istruzioni in metodi, che svolgano ognuno
 * un certo compito. Vediamo il formato di un metodo:
 *
 *      TipoRitorno NomeMetodo(Lista tipo e nome argomenti passati)
 *	{
 *        corpo del metodo
 *	}
 *
 * TipoRitorno     = dichiara il tipo di valore (int, float, ecc.) che il
 *                   metodo restituisce attraverso l'istruzione return.
 * NomeMetodo      = Il nome del metodo, che scegliamo a nostro piacimento,
 *                   basta che non sia uguale ad una delle parole chiave.
 * Lista Argomenti = Una lista di nomi di variabili separate da virgole,
 *		     preceduti dal tipo di variabile stesso (int, float...)
 *                   Questi sono i parametri in ENTRATA del metodo,
 *                   ovvero i dati che gli vengono passati alla chiamata.
 *
 * Opzionalmente si puo' aggiungere, prima del TipoRitorno, un modificatore,
 * che puo' essere public,protected,private,static o altri che vedremo.
 *
 * Ecco un esempio:
 *
 *      int somma(int a,int b)  // Funzione che restituisce un valore INT
 *                              // ed ha 2 parametri in entrata sempre INT
 *	{
 *	   return(a+b);		* Restituisci il risultato di a+b
 *	}
 *
 * Per chiamare questa funzione dal corpo di main() si fa in questo modo:
 *
 *	papero = somma(pippo,pluto);
 *
 * Da notare che non e' necessario passare al metodo variabili con gli stessi
 * nomi di quelle usate nel metodo (che in questo caso si chiamano a,b),
 * basta che siano 2 variabili dello stesso tipo (in questo caso int).
 * Gia' che ci siamo, possiamo isolare il codice che legge una variabile
 * da tastiera e farne un metodo LeggiInt(): tale metodo non richiedera'
 * parametri in entrata (lasceremo le parentesi vuote, non occorre metterci
 * il void), e restituira' in uscita il valore intero letto.
 ************************************************************************* */

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


class Jlez2a {            // Da qua inizia la classe Jlez2a

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

    System.out.println("Dammi un numero:");

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

    System.out.println("Dammi un'altro numero: ");

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

    int papero = somma(pippo,pluto); // Chiamo il metodo "int somma(int,int)"

    System.out.println("La somma dei due e' " + papero);

 }               // Fine del metodo principale Main()


/* -------------------------------------------------------------------------
 * Ora definiamo una funzione chiamata somma(), che in entrata richiede 2
 * variabili di tipo intero, e in uscita restituisce un'altro numero intero.
 *    int somma(int,int)
 * ----------------------------------------------------------------------- */

 public static int somma(int a,int b)
 {
    System.out.println("Sto calcolando la somma... com'e' difficile!!!");
    return(a+b);
 }                  // Fine di "int somma(int,int)"

/* -------------------------------------------------------------------------
 * 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 Jlez2a