백준 온라인 저지 문제풀이/JAVA
[baekjoon 10951번] while문 - A+B - 4(테스트 케이스 개수가 입력되지 않았을 때)
Good Program Good Programmer
2020. 11. 29. 13:11
테스트 케이스 갯수가 입력되지 않았을 때는 그냥 계속 입력되겠끔 코딩을 하면 된다. 즉, while(true){}와 똑같은 결과가 나온다. 하지만 그렇게 제출을 해버리면 당연히 오답처리된다. 출제자의 의도는 다른 많은 사이트에 나와있듯이 EOF를 만날 때까지만 입력을 할 수 있는 프로그램을 만들라는 것 같다.
그렇다면 EOF를 만날 때까지 입력을 받는 프로그램이랑 그냥 while(true)문은 어떤 차이가 있을 지 알아보겠다.
import java.io.*;
import java.util.Scanner;
import java.util.StringTokenizer;
public class Main {
public static void main(String args[]) throws IOException {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
int a = sc.nextInt();
int b = sc.nextInt();
System.out.println(a+b);
}
sc.close();
}
}
출처:ddoongi.tistory.com/31
위 코드는 EOF를 만날 때까지만 입력을 받는 프로그램이고
import java.io.*;
import java.util.Scanner;
import java.util.StringTokenizer;
public class Main {
public static void main(String args[]) throws IOException {
Scanner sc = new Scanner(System.in);
while (true) {
int a = sc.nextInt();
int b = sc.nextInt();
System.out.println(a+b);
}
}
}
위 코드는 while(true)문을 사용한 코드이다. 각각의 결과는 다음과 같다.
1 1
2
2 3
5
^D
Process finished with exit code 0
【EOF까지 받는 코드】
1 1
2
2 3
5
^D
Exception in thread "main" java.util.NoSuchElementException
at java.base/java.util.Scanner.throwFor(Scanner.java:937)
at java.base/java.util.Scanner.next(Scanner.java:1594)
at java.base/java.util.Scanner.nextInt(Scanner.java:2258)
at java.base/java.util.Scanner.nextInt(Scanner.java:2212)
at Main.main(Main.java:10)
Process finished with exit code 1
【while(true) 코드】
보시다시피 ctrl+D를 눌러서 EOF를 입력해줬을 때 하나는 그냥 종료를 해주고 다른 하나는 nextInt()메소드에서 Exception이 발생하여 종료되는 것을 확인할 수 있다.
따라서 EOF까지만 입력받고 싶은 프로그램에서는 while문에서 EOF까지만 받도록 지정을 해줘야 하는 것을 알 수 있다.