
>>문제 바로가기<<
정답률 36.2%의 반복문 문제이다.
그냥 단순한 반복문인데 왜 정답률이 낮을까?
포인트는 "입력을 몇 번 하는지 알려주지 않는다"라는 점에 있다.
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int A, B;
while(true){
A = sc.nextInt();
B = sc.nextInt();
System.out.println(A+B);
}
}
}
런타임 에러(InputMisatch)
만약 코드를 저렇게 짠다면
런타임 에러를 마주할 수 있을것이다.
왜 그런걸까?
EOF(End of File)
"입력(데이터)의 끝"을 나타내는 신호 또는 상태
백준은 입력을 전부 제공하고 나면 EOF(입력 종료)를 보낸다.
즉 "더이상 읽을 수 없는 시점"이다.
sc.nextInt()가 있어서 당연히 정수형이 올 줄 알았는데
EOF때문에 읽을수가 없으니 시스템이 당황해서 런타임 에러를 내보낸다.
때문에 while문을 true로 설정해서 항상 들어갈 수 있게 하면 안되고
조건을 달리해서 넣어줘야한다.
그래서 필요한 함수가 hasNextInt() 함수이다.
> hasNextInt()
위 함수는
"입력받은 값이 정수면 true를 반환"하고,
"그 외의 값을 받으면 false를 반환"한다.
즉 while 조건문에 해당 함수를 넣으면
Scanner 입력을 받은 후 hasNextInt()가 먼저 이게 정수인지 아닌지 판단하고
맞다면 true, 틀리면 false를 반환한다.
때문에 EOF를 받게돼도 false로 판단되어
안전하게 while문을 탈출할 수 있고
런타임 에러가 발생하지 않는다.
import java.util.Scanner;
public class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int A, B;
while(sc.hasNextInt()){
A = sc.nextInt();
B = sc.nextInt();
System.out.println(A+B);
}
}
}
그러므로 최종적인 코드는 이렇게 짜여진다.
맞았습니다!!