Come funziona il buffering dell'input di Java's Scanner (System.in)?

0

Negli ultimi giorni, ho letto le domande come segue: "Perché il mio codice di input non funziona?" Io stesso ho avuto un paio di volte problemi nel far funzionare bene l'input ...

per quanto buono, ho trovato un paio di soluzioni per evitare il problema come digitare nextLine() per svuotare il buffer. Ma non sono ancora sicuro di cosa sto facendo.

Penso che Scanner(somefile) sia più semplice da capire per me, dal momento che ogni carattere (incluso lo spazio o invio) è scritto sul file. Funziona allo stesso modo quando otteniamo l'input dalla tastiera? Quando chiedo un intero per esempio (usando nextInt() ), poi do il numero nella riga di comando e premo 'intro', perché quel \n rimane sul buffer?

Qualcuno potrebbe aiutarci a capirlo dando una risposta passo passo?

    
posta Pablito 31.08.2015 - 13:54
fonte

1 risposta

2

In base a Documenti Java: Informazioni su nextInt()

Scans the next token of the input as an int. If the translation is successful, the scanner advances past the input that matched.

Questo metodo consuma il numero intero, ma non il carattere di nuova riga o un altro carattere dopo quello intero. Quindi, dopo aver consumato il numero intero di nextInt() , rimane solo il carattere di nuova riga (in questo caso) inserito dalla tastiera o dal file. Non può essere scartato da nextInt() . Pertanto \n rimane sul buffer.

E la descrizione di nextLine () dice

Advances this scanner past the current line and returns the input that was skipped. This method returns the rest of the current line, excluding any line separator at the end. The position is set to the beginning of the next line.

Come previsto da nextLine() , consuma il carattere di nuova riga che non è stato consumato da nextInt() . Ma quando lo restituisce esclude newline così la stringa restituita da nextLine() diventa vuota.

    
risposta data 31.08.2015 - 18:33
fonte

Leggi altre domande sui tag