JAVA – Come si legge da tastiera

JAVA – Come si legge da tastiera in una console application, in questa lezione

Lettura da standard input

Per leggere da stdin in Java, dobbiamo utilizzare alcuni oggetti fondamentali, ovvero InputStreamReader e BufferedReader . Nel codice sottostante mostro una tipica implementazione con successivo output.

package BasicOperations;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class InOut {
    public static void main(String[] args) {
        // creo l'oggeto per leggere da Standard Input
        InputStreamReader in=new InputStreamReader(System.in);
        BufferedReader keyboard=new BufferedReader(in);
        // variabili
        String name;
        try{
            System.out.println("Come ti chiami?");
            name=keyboard.readLine();
            System.out.println("Ciao: "+name);
        }catch (IOException e){
            // gestione dell'eccezione
        }
    }
}

Leggere da tastiera interi e double

Nel caso dovessimo leggere numeri interi, ovviamente dovremo convertirli per poterli utilizzare con qualsiasi operazione aritmetica. Per esempio, chiedo l’anno di nascita e calcolo l’età dell’utente come nel seguente questo snippet di codice

        String strYOB; // YOB= year of birthday
        Integer intYOB;
        Integer currentYear;
        Calendar calendar;
        try{
            System.out.println("In che anno sei nato?");
            strYOB= keyboard.readLine();
            intYOB=Integer.parseInt(strYOB);
            // ottengo l'anno corrente
            calendar=GregorianCalendar.getInstance();
            currentYear=calendar.get(Calendar.YEAR);
            System.out.println("Hai " + (currentYear-intYOB) +" anni");
        }catch (IOException e){
            // gestione dell'eccezione
        }

Un’analoga procedura ci permette di convertire una stringa in Double e per risparmiare tempo possiamo passare l’invocazione del metodo readLine() dell’oggetto keyboard come parametro per il metodo statico parseDouble della classe Double nel seguente modo:

Double ticketPrice;
System.out.println("Quanto ti è costato il biglietto del bus?");
ticketPrice=Double.parseDouble(keyboard.readLine());

IMPORTANTE: quando usiamo operazioni si lettura da standard input si possono generare eccezioni, e come sappiamo, Java ci “obbliga” a gestirle. L’eccezione che dovremmo gestire con il costrutto try-catch è la IOException, ovvero una eccezione di Input/Output.

L’exception handling di Java deriva direttamente (anche da un punto di vista sintattico) da quello del linguaggio C++. Tuttavia, il meccanismo di Java deve considerarsi decisamente più oneroso, ma certamente più sicuro, grazie alla cosiddetta regola dello handle or declare (gestisci o dichiara), che in sostanza obbliga il programmatore a prevedere esplicite contromisure per ogni situazione anomala (prevedibile).

Conversioni per gli altri tipi di dati in Java

 boolean answer=Boolean.parseBoolean(keyboard.readLine());
 Float latitude=Float.parseFloat(keyboard.readLine());
 strYOB=String.valueOf(intYOB);
  • Riga 1 convertiamo da stringa (true/false) nel corrispettivo valore booleano
  • Riga 2 convertiamo da stringa in un valore float
  • Riga 3 possiamo anche convertire un intero in una stringa

Il metodo statico .valueOf() della classe String grazie all’ overloading1 può ricevere differenti tipi di parametri :

static StringvalueOf(boolean b)Returns the string representation of the boolean argument.
static StringvalueOf(char c)Returns the string representation of the char argument.
static StringvalueOf(char[] data)Returns the string representation of the char array argument.
static StringvalueOf(char[] data, int offset, int count)Returns the string representation of a specific subarray of the char array argument.
static StringvalueOf(double d)Returns the string representation of the double argument.
static StringvalueOf(float f)Returns the string representation of the float argument.
static StringvalueOf(int i)Returns the string representation of the int argument.
static StringvalueOf(long l)Returns the string representation of the long argument.
static StringvalueOf(Object obj)Returns the string representation of the Object argument.
API del metodo valueOf della classe String

1 OVERLOADING: una tecnica di programmazione che ci consente di “sovraccaricare” un metodo di una classe con diverse varianti, in base ai parametri passati come riferimento. Dal punto di vista dell’utilizzo della classe ciò ci consente di definire in maniera dinamica il metodo che meglio si adatta alla nostra esigenza.

Pubblicato da Carlo Contardi

Carlo Contardi, docente di informatica e sviluppatore Full Stack, condivide la sua passione per la programmazione e l’informatica attraverso il suo blog Space Coding. Offre preziosi consigli e soluzioni pratiche a chi vuole imparare a programmare o migliorare le proprie abilità. 🚀👨‍💻

Translate »