문제

Java 6의 키보드에서 텍스트 입력을 얻으려고 노력하고 있습니다. 저는 언어를 처음 접하고 다음 코드를 실행할 때 마다이 오류가 발생합니다.

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)

다음 () 메소드를 잘못 사용하고 있습니까? 나는 그것이 사용자의 입력을 기다릴 것이라고 생각했지만 그것이 그렇지 않은 것처럼 보이고 스캐너에 남은 것이 없다는 예외를 던지는 것 같습니다.

도움이 되었습니까?

해결책

예외의 이유는 당신이 keyIn.close() 스캐너를 한 번 사용하면 Scanner 그러나 또한 System.in. 다음 반복은 새로운 것을 만듭니다 Scanner 왜냐하면 그것은 즉시 날아갑니다 System.in 이제 폐쇄되었습니다. 이를 해결하려면 입력하기 전에 한 번만 스캐너 만 만드는 것입니다. while 루프를 건너 뛰십시오 close() 닫고 싶지 않기 때문에 완전히 전화하십시오 System.in.

프로그램이 여전히 작동하지 않는다는 것을 고치면 == 그리고 != 문자열 비교. Java의 문자열을 비교할 때는 사용해야합니다 equals() 문자열 내용을 비교합니다. 당신이 사용할 때 == 그리고 != 객체 참조를 비교하므로 이러한 비교는 항상 코드에서 False를 반환합니다. 항상 사용하십시오 equals() 줄을 비교합니다.

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;
}

다른 팁

문자열을 평가하려면 .equals를 사용해야합니다

while (! c.equals ( "y")) {일을 ...

  • 루프 밖에서 스캐너 참조를 선언하십시오. 당신은 그것을 만들고 매번 닫을 필요가 없습니다.

  • 문자열 텍스트를 메소드와 비교하십시오 equals, 연산자가 아닙니다 ==.

Nextline ()을 사용하고 리턴 된 문자열의 첫 번째 요소 만 살펴보십시오.

! = 및 ==는 문자 나 다른 원시 유형에 사용될 때만 작동하며 C#에서만 작동합니다. 적절한 평등을 확인하기 위해 .equals를 사용해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top