Utilizzando Scanner.next () per ottenere l'immissione di testo
-
21-08-2019 - |
Domanda
Sto cercando di ottenere l'immissione di testo dalla tastiera in Java 6. Sono nuovo al linguaggio e ogni volta che ho eseguito il seguente codice, ottengo questo errore:
package test1;
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
boolean quit = false;
while (!quit){
Scanner keyIn;
String c = "x";
while (c != "y" && c != "n") {
keyIn = new Scanner(System.in);
c = keyIn.next();
keyIn.close();
}
if (c == "n")
quit = true;
}
}
}
Exception in thread "main" java.util.NoSuchElementException
at java.util.Scanner.throwFor(Scanner.java:838)
at java.util.Scanner.next(Scanner.java:1347)
at test1.Test.main(Test.java:11)
I Am mis-utilizzando il metodo next ()? Ho pensato che sarebbe aspettare l'input dell'utente, ma sembra che non lo è e gettando l'eccezione dicendo che non c'è più niente nello scanner.
Soluzione
Il motivo per l'eccezione è che si sta chiamando keyIn.close()
dopo aver utilizzato lo scanner una volta, che non solo chiude la Scanner
ma anche System.in
. Il molto prossima iterazione si crea una nuova while
che soffia tempestivamente a causa close()
è ora chiuso. Per risolvere questo, cosa si dovrebbe fare è solo creare uno scanner, una volta prima di entrare nel ciclo ==
, e saltare la !=
chiamare del tutto dal momento che non si vuole chiudere equals()
.
Dopo aver fissato che il programma ancora non funziona a causa della <=> e <=> confronti tra stringhe che fate. Quando si confrontano le stringhe in Java è necessario utilizzare <=> per confrontare il contenuto della stringa. Quando si utilizza <=> e <=> si confrontano i riferimenti agli oggetti, in modo da questi confronti sarà sempre return false nel codice. utilizzare sempre <=> per confrontare le stringhe.
while (!quit){
Scanner keyIn = new Scanner(System.in);
String c = "x";
while (!c.equals("y") && !c.equals("n")) {
c = keyIn.next();
}
if (c.equals("n"))
quit = true;
}
Altri suggerimenti
Per valutare le stringhe si deve usare .equals
while (! C.equals ( "y")) {fare cose ...
-
dichiarare il vostro riferimento Scanner fuori i loop. non c'è bisogno di creare e chiudere ogni volta.
-
Confronto testo stringa con il metodo
equals
, non con l'operatore==
.
Provare a utilizzare nextLine () e solo guardando il primo elemento della stringa che viene restituita.
L'! = E == funziona solo quando viene utilizzato contro personaggi o altri tipi primitivi, che funziona solo in C #. Sarà necessario utilizzare .equals per garantire che si sta verificando per una corretta uguaglianza.