Modulo 2: Strutture fondamentali della programmazione Java
Argomenti Trattati: Input e Output da Console Leggere valori in input (Scanner); Stampare valori di output (System.out.print);
Modulo 2: Strutture fondamentali della programmazione Java Input e Output da Console
Input Con input indichiamo i dati che forniamo ad un programma necessarie per consentire l'esecuzione delle istruzioni. Vediamo che istruzioni può utilizzare un programma per chiedere all'utente di immettere dati tramite tastiera. Consideriamo il caso particolare in cui i dati di input dalla tastiera devono essere presi nella console.
Input Per far ciò in Java bisogna costruire un oggetto della classe Scanner che viene fornita dalla libreria java. Bisogna quindi in primis creare un oggetto di tipo Scanner e poi utilizzare un suo metodo che ci consente di leggere l'input da tastiera.
Input: classe Scanner PASSAGGI 1 Costruire un oggetto di tipo Scanner: Scanner in; in = new Scanner(System.in); Dichiaro un oggetto in di tipo Scanner e creo l'oggetto tramite l'apposito costruttore Scanner( ) che prende come unico parametro System.in, che è un oggetto di sistema che rappresenta lo stream di input standard.
Input: classe Scanner PASSAGGI 2 Leggere una riga di input con il metodo nextline( ): String frase_in; frase_in = in.nextline( ); Utilizzo il metodo nextline( ) che mi ritorna la stringa data in input da tastiera. Dichiaro poi un oggetto frase_in di tipo String in cui vado a salvare tale valore.
Input: classe Scanner INPUT ALTERNATIVI Il metodo nextline( ) ci permetteva di prendere in input una frase, se voglio prendere una sola parola utilizzo il metodo next ( ). String parola_in; parola_in = in.next( ); Utilizzo il metodo next( ) che mi ritorna la parola data in input da tastiera. Dichiaro poi un oggetto parola_in di tipo String in cui vado a salvare tale valore.
Input: classe Scanner INPUT ALTERNATIVI Se anzichè stringhe si vuole leggere un intero si utilizza il metodo nextint ( ). int numero_in; numero_in = in.nextint( ); Utilizzo il metodo nextint( ) che mi ritorna l'intero dato in input da tastiera. Dichiaro poi un oggetto numero_in di tipo int in cui vado a salvare tale valore.
Input: classe Scanner INCLUDERE LA LIBRERIA Per poter utilizzare la classe Scanner bisogna indicare, nella classe in cui dobbiamo usarlo, che vogliamo importare tale classe dalla libreria import java.util.*; Questa istruzione va inserita in testa al file della classe, come prima riga, prima ancora della signature della classe La classe Scanner si trova nella libreria java.util. Approfondiremo poi la funzione import e l'utilizzo delle librerie java.
Input: int-skip-string case RICHIEDERE UNA STRINGA DOPO UN INTERO Se ci troviamo nel caso in cui vogliamo richiedere come input un intero con nextint( ) e successivamente una stringa con nextline( ) accade che questo nextline( ) immediatamente successivo al nextint( ) viene ignorato. Scanner in; int in_i; String in_s; in = new Scanner(System.in);... in_i = in.nextint( ); in_s = in.nextline ( ); Questa richiesta di una stringa viene ignorata.
Input: int-skip-string case MOTIVAZIONE Il motivo per cui ciò accade è semplice: con nextint( ) chiediamo in input un intero ma dopo averlo inserito clicchiamo invio. Java prende l'intero inserito e lo salva ma lascia però l'invio nell'input stream e quindi viene preso come input per il successivo nextline( ) che quindi a noi risulta saltato.
Input: int-skip-string case SOLUZIONE Per aggirare questo problema basta inserire un nextline( ) a vuoto dopo ogni nextint( ). Questo nextline( ) prenderà l'invio del nextint ( ) che ci creava problemi. Scanner in; int in_i; String in_s; in = new Scanner(System.in);... in_i = in.nextint( ); in.nextline ( ); Inserire un nextline( ) a vuoto. in_s = in.nextline ( );
Output Per stampare qualcosa a video, sempre utilizzando la console, utilizziamo l'oggetto di sistema System.out Di tale oggetto possiamo utilizzare due metodi: - print( Stringa che voglio stampare); - println( Stringa che voglio stampare con ritorno accapo )
Output E' possibile utilizzare tali metodi direttamente senza creare prima l'oggetto (vedremo poi più avanti perchè):... System.out.println( Stringa stampata a video );...