Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    Chiarimento gestione input

    Buon giorno a tutti amici.
    Tra pochi giorni suonerà la prima campanella della scuola e ne approfitto per ripetere un po.

    PROBLEMA 1:

    Per leggere un numero da tastiera dichiaro il package.io* e dichiaro questa 2 istruzioni:

    InputStreamReader input = new InputStreamReader (System.in);
    BufferedReader tast = new BufferedReader (input);

    Sapete spiegarmi per bene la funzione di queste 2 istruzioni?

    PROBLEMA 2:

    Come sappiamo per leggere un numero da tastiera bisogna per forza fare la conversione di un dato stringa in intero ovvero:

    String leggin;
    leggin=tast.readLine();
    int n= Integerr.valueOf(leggin).intValue();

    In questo caso il dato che è all' interno di leggin viene trasformato in un oggetto di tipo Integer e poi convertito in intero giusto?

    Io vorrei sapere come mai in Java bisogna assolutamente fare la conversione ed essa come avviene esattamente? dico in codice binario...

    Grazie a chi mi sa rispondere ciaoooooo

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: Chiarimento gestione input

    Originariamente inviato da CenzyGuitar
    InputStreamReader input = new InputStreamReader (System.in);
    BufferedReader tast = new BufferedReader (input);

    Sapete spiegarmi per bene la funzione di queste 2 istruzioni?
    Un InputStream (il System.in) viene incapsulato in un InputStreamReader che viene incapsulato in un BufferedReader. Ciascuna di queste classi è focalizzata solo su un determinato aspetto del I/O. BufferedReader "sa" bufferizzare lo stream di caratteri e leggere "a righe" (cosa che le altre due classi menzionate non sanno fare).

    Originariamente inviato da CenzyGuitar
    Come sappiamo per leggere un numero da tastiera bisogna per forza fare la conversione di un dato stringa in intero ovvero:

    String leggin;
    leggin=tast.readLine();
    int n= Integerr.valueOf(leggin).intValue();

    In questo caso il dato che è all' interno di leggin viene trasformato in un oggetto di tipo Integer e poi convertito in intero giusto?
    Sì ma puoi anche usare solo Integer.parseInt.

    Originariamente inviato da CenzyGuitar
    Io vorrei sapere come mai in Java bisogna assolutamente fare la conversione
    Se hai un String e vuoi lavorare su valori numerici ... deve esserci per forza una conversione.

    Originariamente inviato da CenzyGuitar
    ed essa come avviene esattamente? dico in codice binario...
    Intendi come funziona dentro il parseInt o valueOf (quest'ultimo ritorna Integer, non int)?
    Il parseInt è complicato dal fatto che la implementazione reale è quella di parseInt che accetta un radix, ovvero la radice del numero.

    Se volessi fare tu una conversione, immagina: hai una stringa "25" e vuoi ottenere un int. Dimentichiamo un attimo il '-' per valori negativi. Tieni una variabile es. valore inizialmente a 0. Quindi scansioni la stringa carattere per carattere, per ognuno:
    - verifichi che sia nel range '0'-'9' (tecnicamente sono i codici ASCII 48...57), se così sottrai 48 (o '0' che vale la stessa cosa) per avere un valore numerico pulito 0-9.
    - moltiplichi valore per 10 e sommi la cifra.

    alla fine otterrai (0*10+2)*10+5 = 25
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Grazie per la risposta comunque:

    Se hai un String e vuoi lavorare su valori numerici ... deve esserci per forza una conversione.
    Comunque io dicevo perchè bisogna perforza fare la conversione ovvero invece di scrivere:

    String leggin;
    leggin=tast.readLine();
    int n= Integerr.valueOf(leggin).intValue();

    non si poteva scrivere solo:

    int n=tast.readLine();

    ? Grazie ancora!

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Ovviamente no, perchè readLine() legge una Stringa, non un numero.
    Se l'utente scrive "Ciao", readLine() legge correttamente la stringa... che non è un numero. Se readLine() leggesse un numero, andrebbe in errore.

    Ovviamente se si tenta di convertire in numero la stringa "Ciao" andrà in errore, ma questo non c'entra con la lettura da tastiera: la lettura da tastiera deve leggere qualunque cosa (perchè non è affar suo ciò che l'utente scrive)... è il resto del programma che, aspettandosi qualcosa di particolare, lavora sulla stringa di conseguenza.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.