Perché prendere un input per stringa invece di input per un numero?

3

Sono un principiante in Java e ho una domanda dal libro "Head First Java". Nel libro, l'autore crea un metodo che prende il numero come String e quindi lo converte in int. Perché devo prendere l'input come stringa e convertirlo invece di prenderlo direttamente come int. Di seguito è lo screenshot di cui sto parlando.

    
posta CBR 06.12.2015 - 16:15
fonte

5 risposte

9

Semplicemente perché l'ipotesi dell'utente è probabilmente introdotta attraverso un meccanismo che supporta solo l'immissione di caratteri o stringhe, ma nessun altro tipo. Ad esempio, System.in.read() la maggior parte delle GUI ha un controllo di input di testo, ma non un controllo di input numerico. Quindi, l'utente immette il testo nel controllo e quindi il programma deve convertire il testo in un numero.

    
risposta data 06.12.2015 - 16:23
fonte
3

Per me, questo esempio sta evidenziando un punto molto importante:

Gli utenti non possono immettere i valori "Integer".
Né date, decimali, float o qualsiasi altro tipo di dati ...

... eccetto buone stringhe di vecchio stile che si presentano come valori in altri tipi di dati.

Una volta accettato che l'utente solo lavori in Stringhe e che la tua applicazione funzioni in appropriati Tipi di dati, la tua mente si troverà in un ottimo posto per superare un enorme numero di potenziali bug in fase di esecuzione quando si lavora con l'input dell'utente.

Applica sempre i valori "format" mentre li metti di fronte all'utente e "annulla" i valori mentre li leggi di nuovo. Supponiamo che tutto ciò che viene fornito dall'Utente sia intrinsecamente contaminato e debba essere convalidato e verificato. (ad esempio, "q" è numerico? Che ne dici di "e"? Lingue diverse, tolleranze diverse).

    
risposta data 07.12.2015 - 13:39
fonte
0

Dipende dal metodo actuall che stai utilizzando. Se usi System.in.read () devi convertire in int, perché read () legge byte. Ma se usi uno Scanner puoi leggere direttamente come int come int i = new Scanner(System.in).nextInt()

    
risposta data 06.12.2015 - 17:24
fonte
0

Devi vedere questo non dal punto di vista del codice del tuo programma, ma dal punto di vista dell'utente, che usa una tastiera con circa 100 tasti e chi sarà felicemente toccando questi tasti. Il tuo programma deve quindi dare un senso a questo.

Se si è tentato di leggere solo un numero intero, non è possibile, ad esempio, distinguere tra 0, +0 e -0. Non è possibile distinguere tra i numeri di telefono con 0, 1 o 2 zeri iniziali che sono in realtà molto, molto diversi. Non è possibile consentire a un utente di inserire 12 cm o 12 pollici o 12 pollici. O $ 12,34. Oppure inserisci le dimensioni del vestito e un vestito ha le dimensioni 12-14 anziché solo un numero (e no, non è un -2, è tra la taglia 12 e la taglia 14

E c'è stato uno studio sui gravi problemi con i dati prodotti da alcuni biologi in cui l'inserimento di stringhe come 1234567e1 è stato interpretato come numeri invece di stringhe. O qualcuno aveva cose chiamate 3JAL1985, 3JAM1985 e 3JAN1985 e le prime due erano prese come stringhe e l'ultima come data. Quindi è molto importante sapere come trattare correttamente qualsiasi input. Al di là solo cercando di leggere un numero.

    
risposta data 06.09.2016 - 10:10
fonte
-3

Questa è la procedura migliore, perché quando leggi gli input dell'utente come stringa, puoi utilizzare un blocco try ... catch per rilevare se l'input dell'utente è idoneo a essere un numero intero. Questo viene fatto usando il metodo Integer.parseInt () per convertire la stringa in un intero. Ma quando si riceve l'input direttamente come int, e nel caso in cui l'utente inserisca una stringa di caratteri, il programma si bloccherà. Spero che tu ottenga quello che sto dicendo.

    
risposta data 06.09.2016 - 07:40
fonte

Leggi altre domande sui tag