>Java >java지도 시간 >Java의 `nextLine()`이 `nextInt()` 이후에 예기치 않게 동작하는 이유는 무엇입니까?

Java의 `nextLine()`이 `nextInt()` 이후에 예기치 않게 동작하는 이유는 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2024-12-21 11:37:17692검색

Why Does Java's `nextLine()` Behave Unexpectedly After `nextInt()`?

nextLine() Comprehension

Java의 java.util.Scanner API에서 nextLine() 메소드는 개발자에게 문자열 입력을 구문 분석하는 기능을 제공합니다. 사용자로부터. 그러나 루프 내에서 사용하거나 nextInt()와 같은 다른 입력 구문 분석 메서드 후에 사용하면 다르게 동작할 수 있습니다.

시나리오 #1:

nextLine( ) 성공:

Scanner scanner = new Scanner(System.in);

// Wait for user input before continuing
String sentence = scanner.nextLine();

// Continue with more input
int index = scanner.nextInt();

이 시나리오에서 nextLine()은 다음으로 이동하기 전에 사용자 입력을 기다립니다. nextInt().

시나리오 #2:

이제 예기치 않게 동작하는 코드 조각을 고려해 보세요.

Scanner scanner = new Scanner(System.in);

// Infinite loop
while (true) {
    // Menu options
    int selection = scanner.nextInt();

    // Input only works after reading the number
    if (selection == 1) {
        String sentence = scanner.nextLine();
        int index = scanner.nextInt();
    }
}

여기서 nextLine()은 그렇지 않습니다. nextInt() 이후에 사용자 입력을 기다리지 않습니다. 다음 줄로 건너뛰어 문장 입력이 불가능하게 됩니다.

설명:

이 예제의 차이점은 nextInt() 메서드에 있습니다. 숫자 입력을 읽지만 뒤에 오는 개행 문자(n)를 사용하지 않습니다. 결과적으로 nextInt() 다음에 nextLine()이 호출되면 이미 사용된 개행 문자를 읽으려고 시도하여 시나리오 #2에서 예상치 못한 동작이 발생합니다.

해결책:

이 문제를 해결하려면 각 nextInt() 뒤에 추가 nextLine() 호출을 삽입하여 다음으로 이동하기 전에 줄의 나머지 입력을 소비합니다. 입력요청. 이렇게 하면 nextLine()이 항상 사용자 입력을 기다립니다.

위 내용은 Java의 `nextLine()`이 `nextInt()` 이후에 예기치 않게 동작하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.