blueman911   4년 전

아래 소스코드에서 엔터로 입력받은 값을 구분하려고

String[] s;

s = br.readLine().split("\n");

num[i] = Integer.parseInt(s[i]);

이렇게 바꾸면 NumberFormatException 오류가 뜨더라구요.

BufferedReader로 값을 한줄씩 입력받았을 때 값이 어디에 어떻게 입력되는 건지 알 수 있을까요?

만약 위 코드에서 num[i] = Integer.parseInt(s[0]); 으로 바꾸면 또 잘 돌아가는데 이유를 모르겠습니다.

rlarla97   4년 전

bufferedReader 와 스트림에 대한 이해가 필요할 것 같습니다..

일단 기초적인 부분만 얘기하자면

bufferedReader.readLine() 은 한 줄(개행까지)만 읽으니 당연히

split("\n") 을 해주더라도 한 줄 입력받고 데이터를 더이상 읽지 않는데 나눠줄 데이터가 더이상 없습니다.

그래서 s[0] 에는 처음 입력한 한 줄이 저장되어 있는 반면 s[1] 부터는 데이터가 저장되어 있지 않는 것이고요.

그래서 각 줄 별로 읽어들이려면

br.readLine() 을 입력받으려는 줄 개수만큼 반복해주어야 합니다.

다시한번 말씀드리지만 readLine() 은 '한 줄' 만 읽습니다. 여러줄을 한 번에 읽지 않습니다.

즉, string 배열에 각 입력 행 별로 저장하고싶으시다면

for (int i = 0; i < num.length; i++){

 s[i] = br.readLine();

}

하면 끝나는 문제입니다.

blueman911   4년 전

감사합니다.

댓글을 작성하려면 로그인해야 합니다.