newidextendsid   2년 전

14번 라인에 System.in.read()로 읽어들여서 하면 안되는 건가요? 

답도 문제없이 출력 되는것 같습니다. 

char형 대신 문자열로 처리해서 하니 맞긴 했습니다만 이유를 알 고 싶습니다. 

nahwasa   2년 전


Scanner도 결국 내부에 버퍼가 있고, 미리 읽어들여와서 출력을 내주는 것이기때문에, 또 다른 읽기 방식을 사용하게되면 Scanner가 이미 물고있는 버퍼 내용을 알 수 없어

제대로 동작이 되지 않습니다. 즉, Scanner를 썼다면 Scanner만 써야 합니다.

애초에 .read()와 Scanner를 둘 다 사용할 이유도 없구요.

그럼 질문하신 내용으로 돌아와서, 약간 질문을 변경해보자면 Scanner를 안쓰고 System.in.read()만 사용해서는 안되냐 물어보신다면 당연히 됩니다.

다만 해당 함수의 레퍼런스를 보면 ' Reads the next byte of data from the input stream. The value byte is returned as an int in the range 0 to 255. '

와 같습니다. 결국 byte 하나씩 읽어온다는 말이고, 숫자 하나에 1 byte씩이니 char 또는 한 자리 int를 읽는데는 문제 없겠죠.

그럼 문제는 첫번째줄에는 1~3자리의 숫자가 입력될 것이라는 점인데요, 숫자가 끝나면 무조건 개행문자가 있을 것이므로 이것도 판단하는데 문제는 없습니다.

최종적으로 코드를 변경해서 아래와 같이 하시면 System.in.read()를 사용해서 통과 됩니다.

newidextendsid   2년 전

이해했습니다. 알려주셔서 너무 감사합니다!

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