본문 바로가기

이것저것 알게된 것

Java EOF 처리

[백준 4949 문제를 풀면서 알게된 사실]

4949는 데이터를 입력할 때, 몇개를 입력할 것인지 입력부분에 대한 기준이 없었다.

계속해서 런타임에러가 나고, 결국 프로그램이 종료가 되지 않는 것이 문제임을 알게되었다.

프로그램을 종료하기 위해서는 EOF처리가 필요했다.


EOF(End Of File: 파일끝)란? 

데이터 소스로부터 더이상 읽을 수 있는 데이터가 없음을 뜻한다.


자바에서는 대표적인 입력클래스인 Scanner와 BufferedReader를 통해 데이터를 입력받는다.

각각 클래스의 EOF처리는 다음과 같다.


Scanner

Scanner sc = new Scanner(System.in);

while(sc.hasNextLine())

{

sc.NextLine();

}

while(sc.hasNextInt())

{

sc.NextInt();

}


BufferedReader

BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));

String input = "";

while( (input = bf.readLine()) != null)

{

}


여기서 중요한점

StringTokenizer의 hasMoreTokens으로 EOF를 처리할 수 없다.

StringTokenizer는 문자열을 입력하는 것이 아닌 "입력받은 문자열을 가공하는 역할"을 한다.

단순히 가공한 문자열 자체에서 원하는 행위를 하기 때문에 EOF를 처리한다고 보기는 어렵다.







출처: https://mygumi.tistory.com/236 [마이구미의 HelloWorld]




'이것저것 알게된 것' 카테고리의 다른 글

카카오페이 공모주 알리미  (0) 2021.10.25
srt 10% 할인쿠폰 받기  (0) 2021.07.02
2차원배열 특정값으로 채우기  (0) 2019.08.02
char형 연산  (0) 2019.07.20
비트연산자  (0) 2019.07.20