[JAVA] EOF(End Of File)를 이용한 While문 종료하기
o EOF란 End Of File의 약자로 파일의 끝부분을 나타냅니다. 입력(파일)의 개수가 정해지지 않고 입력을 반복해서 받을 때 입력의 마지막 즉, 더 이상 입력할 값이 없는 것을 의미합니다.
o 그렇기에 반복 횟수가 정해져 있는 For문 보다는 While문에서 주로 사용합니다.
o 자바에서 System.in은 사용자가 ctrl+z키를 입력하면 입력이 끝난 것(EOF)으로 처리합니다.
o 입력을 받는 클래스는 Scanner, BufferedReader가 있으며 각 클래스별 EOF 처리 방법은 아래와 같습니다.
Scanner 클래스
o Scanner 클래스에서는 hasNext~()메소드를 사용하면 EOF를 이용해 while문을 종료할 수 있습니다.
o hasNext~()메소드는 입력 값이 생기기 전까지 실행을 유보하는 역할을 합니다. 입력하는 값의 형태에 따라 true/false를 반환하며 반환된 값을 확인 후 반복문이 종료하게 됩니다.
o hasNextInt()는 입력된 값이 int형이 아닐 경우 false가 반환되어 반복문이 종료되며 hasNext(), hasNextLine()은 ctrl+z를 입력하여 EOF를 알려주면 false가 반환되어 반복문이 종료하게 됩니다.
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while(sc.hasNext())
System.out.println(sc.next());
while(sc.hasNextLine())
System.out.println(sc.nextLine());
while(sc.hasNextInt())
System.out.println(sc.nextInt());
}
}
|
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
boolean fa=true;
while(fa=sc.hasNext()) {
System.out.println("출력 : "+sc.next());
System.out.println("반환 : "+fa);
}
System.out.println("반환 : "+fa);
}
}
|
- 실행 결과 -
BufferedReader 클래스
o BufferedReader 클래스는 입력 받은 값이 null이면 반복문을 종료하는 조건을 작성함으로써 반복문을 종료할 수 있습니다.
public class Main {
public static void main(String[] args) throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
String line=br.readLine();
while(line!=null) { //EOF(ctrl+z) 입력 시 종료
bw.write(line);
bw.newLine();
line=br.readLine();
}
bw.flush();
}
}
|
o EOF를 활용한 알고리즘 문제도 있으니 풀어보면 좋을 것 같습니다.
10951번: A+B - 4
두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.
www.acmicpc.net