[백준] 1001번 문제
문제
문제출처 : Baekjoon
풀이
import java.util.*;
public class Main{
public static void main(String args[]){
Scanner sc = new Scanner(System.in);
int a,b = 0;
while(sc.hasNextInt()){
a = sc.nextInt();
b = sc.nextInt();
if(a < 0 && b < 10){
break;
}else {
System.out.println(a - b);
}
}
sc.close();
}
}
회고
- 1000번문제와 비슷해서 따로 안올리려고 했었는데 런타임에러 만나고 이부분을 해결했었어서 기록해두기로 한다.
1000번 문제에 기록해둔 두번째 답지에서 a,b의 범위와 println만 바꿔서 제출했었다.
[오류가 발생했던 코드↓]
import java.util.*;
public class Main{
public static void main(String args[]){
Scanner sc = new Scanner(System.in);
int a,b = 0;
while(true){
a = sc.nextInt();
b = sc.nextInt();
if(a < 0 && b < 10){
break;
}
}
sc.close();
System.out.println(a-b);
}
}
하지만 이렇게 내니까 런타임 에러 (NoSuchElement)
에러가 났었다. 1000번문제에서는 정상적으로 동작하는데 1001번이랑 비슷한 다른 문제들에서만 문제가 발생하는 이유는 잘 모르겠다 ==;; 어쨌든 백준에서는 에러가 난 부분에 대해서 잘 설명해줘서 천천히 읽어보니
while(true)
로 설정하면, 보통 이런 문제는 입력의 끝을 EOF로 판단해야 합니다. 더 이상 입력 받을 수가 없는데 입력을 받으려고 했기 때문에, 다음과 같은 입력에서 런타임 에러가 발생합니다.
백준사이트참고
그래서 while(true)
말고 1000번 문제에 1번풀이에서 사용했었던 sc.hasNextInt()
을 사용해야한다고 한다.
이러한 에러처리에 대해 알게되어서 좋다. 앞으로는 이런 실수 하지 않도록 조심해야지!