상세 컨텐츠

본문 제목

[JAVA] nextLine()을 사용할 때 주의할 점

JAVA\Spring

by 박집실 2023. 2. 24. 03:11

본문

nextLine()은 엔터 기준으로 그 전까지 입력한 모든 내용을 가져와서 String 타입으로 반환을 해준다. 이 때 

N = scanner.nextInt();

arr = new int[N][N];
num = new int[N * N];

for (int i = 0; i < N; i++) {
    String a = scanner.nextLine();
    for (int k = 0; k < N; k++) {
        arr[i][k] = a.charAt(k) - 48;
    }
}

이런 식으로 먼저 정수를 입력받고 문자열을 입력받는 다고 할 때 정수 입력받은 것도 엔터로 불러들인 것이라고 인지하여 문자열로 가져온다. 그래서 N번의 문자열을 입력받고 싶었지만 이미 맨 첨에 돌아갈 때 정수 입력받은 것이 문자열 입력으롷 한 번 들어가버렸기에 실제로는 N번 돌아간 것이 맞지만 N - 1만 작동한 것처럼 착각이 드는 상황이 발생한다. 심지어 정수 입력이 잘못 들어갔기에 내가 의도하였던 문자열 입력 받는 것에 조차 실패한다. 

 

이를 해결하기 위해선 

Scanner scanner = new Scanner(System.in);
N = scanner.nextInt();
scanner.nextLine();
arr = new int[N][N];
num = new int[N * N];

for (int i = 0; i < N; i++) {
    String a = scanner.nextLine();
    for (int k = 0; k < N; k++) {
        arr[i][k] = a.charAt(k) - 48;
    }
}

이런 식으로 한 번 nextLine()를 호출해준 뒤로 의도한 기능을 진행시켜주어야한다. C언어로 치면은 입력버퍼를 비워주어야하는 상황이랑 비슷한 것이라 생각하면 좋을 것 같다(원리는 완전히 다를 수 있다. 상황의 느낌이 비슷하다는 거다 느낌이... )

관련글 더보기