10951번 바로가기 : https://www.acmicpc.net/problem/10951
# 10951 : A + B - 4
두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.
입력
입력은 여러 개의 테스트 케이스로 이루어져 있다.
각 테스트 케이스는 한 줄로 이루어져 있으며, 각 줄에 A와 B가 주어진다. (0 < A, B < 10)
출력
각 테스트 케이스마다 A+B를 출력한다.
풀이 코드
import java.util.Scanner;
public class Main {
public static void main(String[] args)
{
int a, b;
Scanner sc = new Scanner (System.in);
while(sc.hasNextInt())
{
a = sc.nextInt();
b = sc.nextInt();
System.out.println(a+b);
}
sc.close();
}
}
- 내가 문제를 풀면서 생각했던 궁금증 정리해보기 :
hasNextInt()가 무슨 역할인지, \n가 들어가는데 왜 while문의 조건이 false가 되지 않는지
1. while(sc.hasNextInt())
while문이 실행될 때 조건문을 검사하면서 hasNextInt() 메서드를 실행시킨다.
< hasNextInt() 메서드 >
- 입력 스트림이 비어 있는 경우 사용자가 데이터를 입력할 때까지 대기한다.
(이 메서드도 nextInt 메서드와 마찬가지로 입력을 받으려고 한다. 따라서 이전에 입력을 미리 받아두지 않아도 hasNextInt는 정상적으로 실행된다.) - 입력을 대기하다가 데이터가 들어오면 int형이 맞는지 확인한다. (아닐 경우 false -> 반복 종료)
이때, nextInt()처럼 데이터를 꺼내오지 않고 단순히 int형이 맞는지 확인만 한다.
따라서 입력할 때 1 2.. 와 같은 정수가 아닌 a b 등의 문자를 입력하면 hasNextInt()는 false를 반환한다. while문도 종료된다.
만약 1 2를 입력했다면 이는 순서대로 a, b에 들어간다. (nextInt 메서드로 인해 입력 스트림에서 꺼내져 변수에 저장된다.)
hasNextInt()는 입력 값을 꺼내오지 않기 때문에 입력 값이 a, b에 들어갈 수 있는 것이다 !!
또한 nextInt()와 마찬가지로 hasNextInt()도 공백을 무시한다.
예를 들어 프로그램을 실행시키고 1 2를 입력했다고 하자.
입력 스트림에는 1 2\n이 저장되어 있을 것이다.
하지만 hasNextInt()는 공백(\n포함)을 무시하므로, 1과 2는 정수이기 때문에 while문 조건이 참이 되어 반복이 계속 돌아갈 수 있다.
'Coding > Java - BaekJoon' 카테고리의 다른 글
[코드업/Codeup] Java : 1010~1018 풀이 [기초-입출력] #1 (0) | 2024.07.01 |
---|---|
[코드업/Codeup] Java : 1001~1007 풀이 [기초-출력] (0) | 2024.07.01 |