언어/JAVA

[JAVA] EOF(End Of File)를 이용한 While문 종료하기

chan10 2021. 3. 25. 11:22

EOFEnd Of File의 약자로 파일의 끝부분을 나타냅니다. 입력(파일)의 개수가 정해지지 않고 입력을 반복해서 받을 때 입력의 마지막 즉, 더 이상 입력할 값이 없는 것을 의미합니다.

그렇기에 반복 횟수가 정해져 있는 For문 보다는 While문에서 주로 사용합니다.

자바에서 System.in은 사용자가 ctrl+z키를 입력하면 입력이 끝난 것(EOF)으로 처리합니다.

입력을 받는 클래스는 Scanner, BufferedReader가 있으며 각 클래스별 EOF 처리 방법은 아래와 같습니다.

 

Scanner 클래스

Scanner 클래스에서는 hasNext~()메소드를 사용하면 EOF를 이용해 while문을 종료할 수 있습니다.

o  hasNext~()메소드는 입력 값이 생기기 전까지 실행을 유보하는 역할을 합니다. 입력하는 값의 형태에 따라 true/false를 반환하며 반환된 값을 확인 후 반복문이 종료하게 됩니다.

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 클래스

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를 활용한 알고리즘 문제도 있으니 풀어보면 좋을 것 같습니다.

www.acmicpc.net/problem/10951

 

10951번: A+B - 4

두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.

www.acmicpc.net