I am trying to get text input from the keyboard in Java 6. I am new to the language and whenever i run the following code, I get this error:
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)
Am I mis-using the next() method? I thought it would wait for user input but it looks like it isn’t and throwing the exception saying that there is nothing left in the scanner.
The reason for the exception is that you are calling
keyIn.close()after you use the scanner once, which not only closes theScannerbut alsoSystem.in. The very next iteration you create a newScannerwhich promptly blows up becauseSystem.inis now closed. To fix that, what you should do is only create a scanner once before you enter thewhileloop, and skip theclose()call entirely since you don’t want to closeSystem.in.After fixing that the program still won’t work because of the
==and!=string comparisons you do. When comparing strings in Java you must useequals()to compare the string contents. When you use==and!=you are comparing the object references, so these comparisons will always return false in your code. Always useequals()to compare strings.