프로그래밍/JAVA

[JAVA] 백준 10951 A+B -4 (Scanner메소드-hasNextInt)

pxatd 2021. 3. 31. 14:18
728x90

문제

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

입력은 여러 개의 테스트 케이스로 이루어져 있다.

각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 A와 B가 주어진다. (0 < A, B < 10)

학습

쉬울 줄 알고 얕봤다가 조금 당황했던 문제다. 두 수를 입력받아 합을 출력하는 간단한 문제이지만, 입력받을 테스트 케이스의 개수와 종료조건이 명시되어있지 않아 자칫 쉽게 생각했다가는 Error가 발생한다. 따라서 입력으로부터 더이상 읽을 수 있는 데이터가 없음을 나타내야하는데 C나 C++에서는 주로 EOF(End of File)로 나타낸다. 만약 이 문제를 C로 풀었다면

while (scanf("%d %d".&A,&b) !=EOF)

라는 코드를 작성했을 것이다. 자바에서도 비슷한 기능의 메소드가 있는지 찾아봤더니 scanner의 메소드 중 hasNextInt()가 있었다.

 

https://mine-it-record.tistory.com/103

 

scanner.hasNextInt()

반환값: scanner객체에 입력값이 int값일 때만 true를 반환함

즉, 입력값이 들어올 때 까지 while 문 내부가 실행되지 않다가, 입력값이 들어와 scanner.hasNextInt()가 true를 리턴한 후에 while 문이 실행된다.

 

**그런데 궁금한점 

hasNextInt()로 데이터 값이 없을 때 까지 입력받는다는건 이해했는데, 내가 코드에 sc.close()라고 더이상 값을 입력 받지 않는다는 메소드를 넣어주었더니 BOJ에서 런타임 오류가 발생했다. hasNext와 close는 같이 쓰일수 없는건가? 

생각해보면 hasNextInt 메소드 자체가 입력값이 들어오면 true, 아니면 실행되지 않으니 close한다는 게 모순인것 같기도 하고.. 헷갈린다. 이 부분에 대해서는 좀 더 찾아봐야 할 것 같다.

코드

import java.util.Scanner;
public class Main {

	public static void main(String[] args) {

		Scanner sc=new Scanner(System.in);
		while(sc.hasNextInt()) {
		int A = sc.nextInt();
		int B = sc.nextInt();
		System.out.printf("%d\n",A+B);
	}
	}

}
출처

www.acmicpc.net/problem/10951

10951번: A+B - 4

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

www.acmicpc.net

 

728x90