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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top