Problema con Java Scanner sc.nextLine ();
-
20-09-2019 - |
Domanda
sry per il mio inglese :)
Im nuovo di programmazione Java e ho un problema con scanner. Ho bisogno di leggere un Int, mostrare alcune cose e poi leggere una stringa in modo che uso sc.nextInt (); visualizza la mia roba showMenu (); e poi provo a leggere una stringa palabra = sc.nextLine ();
Qualcuno mi ha detto che ho bisogno di usare una sc.nextLine (); dopo sc.nextInt (); ma io non capisco perché devi farlo: (
Qui è il mio codice:
public static void main(String[] args) {
// TODO code application logic here
Scanner sc = new Scanner(System.in);
int respuesta = 1;
showMenu();
respuesta = sc.nextInt();
sc.nextLine(); //Why is this line necessary for second scan to work?
switch (respuesta){
case 1:
System.out.println("=== Palindromo ===");
String palabra = sc.nextLine();
if (esPalindromo(palabra) == true)
System.out.println("Es Palindromo");
else
System.out.println("No es Palindromo");
break;
}
}
Ty così tanto per il vostro tempo e aiuto: D
Soluzione
nextInt()
legge solo finché non si è trovato l'int e poi si ferma.
Devi fare nextLine()
perché il flusso di input ha ancora un carattere di nuova riga e, eventualmente, altri dati non int sulla linea. Chiamata nextLine()
legge in qualsiasi dato che resta, compresa la immettere pressato tra l'inserimento di un int e inserendo una stringa l'utente.
Altri suggerimenti
Quando si inserisce un valore (se String
, int
, double
, ecc ...) e premere 'invio,' un carattere di nuova linea (aka '\n'
) verrà aggiunto alla fine del vostro input. Quindi, se si sta entrando in un int, sc.nextInt()
leggerà solo il numero immesso e lasciare il '\n'
dietro nel buffer. Quindi, il modo per risolvere questo problema è quello di aggiungere un sc.nextLine()
che leggerà le rimanenze e buttarlo via. Questo è il motivo per cui è necessario disporre che una riga di codice nel vostro programma.