Esercitazioni JAVA


pagine di Roberto Ricci L.S. "A. Righi", Bologna. Ultima revisione


 
 
 

Per iniziare


 
  1. Inserire il floppy personale per salvare le esercitazioni nel dirive A:
  2. Aprire il file fond1eo\Es5.htm per leggere e seguire l'esercitazione
  3. Ridurre le dimensioni della finestra che deve restare visibile ma consentire la visibilità di un'altra nuova finestra

 
 

Uso del compilatore JDK e input da console


  In questa fase l'ambiente JCreator non è necessario, sostituibile da qualunque editor - come il Blocco Note -.
Gli esempi seguenti permettono di chiarire la funzione dell'argomento String[] args del metodo main.
  1. Aprire l'ambiente JCreator facendo doppio Click sull'icona presente sul Desktop
  2. Ridimensionare la finestra in modo che sia visibile anche quella con il testo dell'esercitazione
  3. Aprire con File|New una finestra di editor per il file a:\Media.java
  4. Redigervi il seguente testo:
    public class Media{
      public static void main(String[] args){
        int n=args.length;
        float somma=0;
    	for (int i=0; i<n; i++){
    		  somma += Float.parseFloat(args[i]);
    	}
    
    	System.out.println(" media = "+ somma/n);
    
      }
    }
    
  5. salvare con File|Save,
  6. aprire l'ambiente Prompt dal menu Start|Programmi di Windows
  7. scrivere il comando
    A:
    
    per selezionare tale unità come corrente
  8. compilare direttamente con JDK mediante il comando
    javac Media.java
    
    dove javac è il programma compilatore
  9. verificare la presenza del file compilato Media.class e poi eseguire mediante il comando
    java Media <lista dei dati separati da spazio>
    
    dove java è il programma che lancia la JVM e permette l'esecuzione del bytecode seguito in questo caso dall'input di alcuni dati
  10. si può avere una sessione come la seguente:
    
    Microsoft Windows XP [Versione 5.1.2600]
    (C) Copyright 1985-2001 Microsoft Corp.
    
    C:\Documents and Settings\rr>a:
    
    A:\>javac Media.java
    
    A:\>java Media 1 2 3 4
     media = 2.5
    
    A:\>
    

 
 

Input da console e System.ini: classe In


  La classe System, priva di costruttori di oggetti - quindi un oggetto unico -, possiede attributi (come out, un oggetto della classe PrintStream, che a sua volta ha metodi come println(<stringa>) e print(<stringa>)) e metodi (come currentTimeMillis()) particolarmente utili.
L'attributo System.in, un oggetto della classe InputStream che a sua volta ha metodi come read() per leggere il prossimo byte introdotto, servirà per l'input da tastiera in ambiente console.
  1. Esaminare la classe In nel file In\In.java che contiene metodi di lettura come i seguenti:
      public static String readStr(String msg)
      throws IOException { // le eccezioni che possono verificarsi debbono essere gestite;
    	               // in questo caso è creato un oggetto della classe IOExecption
    		       // e poi tale oggetto è restituito al chiamante
        System.out.print(msg);
        String stringa="";
        int s;
        while ((s=System.in.read())!='\n')
            stringa += (char) s;
            
        return stringa;
        
      }
    
    
    	/** Legge reali
    	 *@param msg il messaggio di pronto alla lettura
    	 *@return float terminato dal carattere di 'a capo'
    	 */
    	 
      public static float readReal(String msg)
      throws IOException {
        System.out.print(msg);
        String stringa="";
        int s;
        while ((s=System.in.read())!='\n')
            stringa += (char) s;
            
        return Float.parseFloat(stringa);
        
      }
    
    
    dove
        int s;
        while ((s=System.in.read())!='\n')
            stringa += (char) s;
    
    equivale a
        int s=System.in.read();
        while (s= != '\n'){
            stringa += (char) s;
    	s=System.in.read();
        }
    
  2. esaminare anche la seguente descrizione dell'manuale d'uso
  3. la gestione degli errori che possono accadere durante l'esecuzione è imposta al programmatore dal compilatore Java; la specifica delle eccezioni, oggetti presi in considerazione nel caso di errori, debbono essere inseriti nella dichiarazione del metodo preceduti dalla parola chiave 'throws', rilanciare;
  4. copiare in A: il file sorgente e compilarlo
  5. utilizzare questa classe in un'applicazione per calcolare la media di una serie di dati inseriti da console non prima di aver letto il valore della variabile che inform sul loro numero totale.

 
 

BufferedReader e InputStreamReader; classe stdio


  Un InputStreamReader è un ponte tra flussi (streams) di byte e di caratteri: legge dal flusso di byte in input con il metodo read() e li decodifica come caratteri. In generale, per migliorare l'efficienza, conviene "avvolgere" con un BufferedReader il Reader, sia esso un FileReader o sia un InputStreamReader. Il BufferedReader è in grado di leggere una linea di testo - che termina con un line feed '\n' o un carriage return '\r' - con il metodo readLine().
  1. Esaminare la classe stdio nel file stdio.java che contiene metodi di lettura come i seguenti:
      public static String promptStr(String msg){
        System.out.print(msg);
        try {
             return in.readLine();
        } catch (IOException e) {
             return "";
        }
      }
    
      private static BufferedReader    
      	in = new BufferedReader(new InputStreamReader(System.in));
    
    
  2. esaminare anche la seguente descrizione dell'manuale d'uso
  3. quando si tenta di usare un metodo che può causare problemi, quindi dichiarato con la definizione 'throws Exception', il compilatore non accetta il codice a meno che non contenga un particolare costrutto sintattico
    	try{
    		... istruzioni che possono dare problemi
            } catch(Exception e) { 
    		... istruzioni da eseguire se si verifica il problema
            };
    
    Si dice che l'oggetto acchiappa (catch) l'eccezione.
  4. utilizzare la classe per realizzare un'applicazione per la media di una serie di dati letti da console.

 
 

Classe JOptionPane

Probabilmente il modo più semplice per l'input è ricorrere alla classe JOptionPane del package javax.swing. Qui sono a disposizione i metodi: La finestra di dialogo associata alla classe ha dunque forma tipo
nome finestra
icona messaggio
riga di input oppure elenco di opzioni
bottoni
  1. Analizzare ed eseguire la seguente applicazione che fa uso dei metodi showMessageDialog e showInputDialog
    import javax.swing.JOptionPane;
    
    public class ProvaJOP1{
    	public static void main(String[] args){
    		String in = JOptionPane.showInputDialog("Inserire una stringa");
    		String inRov="";
    		for (int i=0; i<in.length(); i++)
    			inRov = in.charAt(i)+inRov;
    		JOptionPane.showMessageDialog(null,"La stringa rovesciata è:\n "+inRov);
    	}
    }
    
  2. Realizzare un'applicazione per la media di una serie di dati.
  3. Analizzare ed eseguire la seguente applicazione che fa uso anche del metodo showConfirmDialog e della proprietà YES_NO_CANCEL_OPTION affinché nella finestra di dialogo compaiano tre pulsanti YES, NO, CANCEL
    import javax.swing.JOptionPane;
    
    public class ProvaJOP2{
    	public static void main(String[] args){
    		
    		int sel=JOptionPane.showConfirmDialog(null, 
    			"Visualizzo la tua risposta in una finestra di dialogo?", 
    			"Conferma", JOptionPane.YES_NO_CANCEL_OPTION);
    
    		if (sel == 0) JOptionPane.showMessageDialog(null,"Hai scelto si");
    		if (sel == 1) System.out.println("Hai scelto no");
    	}
    }
    
  4. Analizzare ed eseguire la seguente applicazione che fa uso anche del metodo showOptionDialog e inoltre
    import javax.swing.JOptionPane;
    
    public class ProvaJOP3{
    	public static void main(String[] args){
    		Object[] possibili= { "finestra dialogo", "console", "nessuna"};
    		int sel=JOptionPane.showOptionDialog(null, 
    			"Scegliere output su","Selezione",
    			JOptionPane.DEFAULT_OPTION, JOptionPane.QUESTION_MESSAGE,
    			null, possibili, possibili[0]);
    		if (sel==0) JOptionPane.showMessageDialog(null,"Output su "+possibili[sel]);
    		if (sel==1) System.out.println("Output su "+possibili[sel]);
    	}
    }
    
    
  5. Analizzare ed eseguire la seguente applicazione che fa uso anche del metodo showInputDialog per operare una scelta tra diverse possibili stringhe
    import javax.swing.JOptionPane;
    
    public class ProvaJOP4{
    	public static void main(String[] args){
            int giuste=0;
            int nDom=3;
            
    		Object[] risPoss1= { "non so", "una classe", "un metodo","una variabile"};
    		Object sel= JOptionPane.showInputDialog(null, 
    			"JOptionPanel è l'identificatore di","Domanda n°1",
    			JOptionPane.QUESTION_MESSAGE, null,
    			risPoss1, risPoss1[0]);
    		if (sel.equals(risPoss1[1])) giuste ++;
    
    		Object[] risPoss2= { "non so", "eseguibile","sorgente", "compilato"};
    		sel= JOptionPane.showInputDialog(null, 
    			"Il formato bytecode è un programma Java","Domanda n°2",
    			JOptionPane.QUESTION_MESSAGE, null,
    			risPoss2, risPoss2[0]);
    		if (sel.equals(risPoss2[3])) giuste ++;
    		
    		Object[] risPoss3= { "non so", "selezione","ripetizione", "sequenza"};
    		sel= JOptionPane.showInputDialog(null, 
    			"Il costrutto  while  individua una struttura di","Domanda n°3",
    			JOptionPane.QUESTION_MESSAGE, null,
    			risPoss3, risPoss3[0]);
    		if (sel.equals(risPoss3[2])) giuste ++;
    
    		JOptionPane.showMessageDialog(null,"Hai ottenuto il punteggio "+100*giuste/nDom);
    
    	}
    }
    

 
  NOTA: Al termine di ogni sessione di lavoro fare una copia del floppy e poi spegnere il computer con Start/Chiudi sessione/Arresta il sistema.
pagine di Roberto Ricci L.S. "A. Righi", Bologna. Ultima revisione