[Java] nextInt 다음에 nextLine 사용시 오류발생하는 원인

epiphany·2023년 9월 21일
0
post-thumbnail

백준 알고리즘 9086 문제를 풀는데 for문안에 있는 스캐너 함수가 실행이 안되는 문제가 발생했다.

// 오류가 발생하는 코드

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        char[] arr;
        int num = sc.nextInt();
        for (int i=0; i<num; i++){
            String word = sc.nextLine();
            arr = word.toCharArray();
            System.out.printf("%s%s", arr[0], arr[arr.length-1]);
        }
    }
}
// 마지막 System.out.printf에서 ArrayIndexOutOfBoundsException 발생

for문 안에서 변수를 선언해서 발생하는 건가해서 수정해봤는데도 동일한 문제가 발생했다.
그래서 찾아보는데..

원인

nextInt 다음에 nextLine을 사용해서 발생한 문제였다.

진짜 Java 쉽지 않다...

nextInt 메소드의 경우 마지막 개행문자(\n)를 제거하지 않는데 nextInt다음에 호출된 nextLine이 개행문자를 바로 받아오기 때문에 nextLine 실행할때 값을 입력하지 않았음에도 그냥 넘어가는 것이다

해결 코드

import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        char[] arr;
        int num = sc.nextInt();
        sc.nextLine();
        for (int i=0; i<num; i++){
            String word = sc.nextLine();
            arr = word.toCharArray();
            System.out.printf("%s%s", arr[0], arr[arr.length-1]);
        }
    }
}

참고

0개의 댓글