[JAVA] 입출력

hgh1472·2023년 8월 19일
0

자바에 적응하면서 두 숫자를 입력받고 숫자의 합을 구하는 프로그램을 만들고 있었다.

import java.io.IOExxception;
import java.util.Scanner;

public class Sample
{
	public static void main(String[] args) throws IOException
    {
    	Scanner sc1 = new Scanner(System.in);
        Scanner sc2 = new Scanner(System.in);
        System.out.println(sc1.nextInt() + sc2.nextInt());
    }
}

위 코드에 1 2를 입력했더니 3을 출력하지않고 입력을 기다린다.

이러한 오류가 나는 이유

두 개의 Scanner 인스턴스가 모두 System.in을 사용하여 입력받으려 하기 때문이다. System.in은 하나의 입력 스트림이므로 여러 번 Scanner를 생성하여 동시에 사용하는 것은 예상치 못한 동작을 초래할 수 있다. 두 개의 Scanner 인스턴스를 사용하면, 첫 번째 Scanner가 입력 스트림에서 값을 읽어들이면서 해당 줄의 끝에 도달한다. 이때 입력 스트림에는 아직 입력이 남아있을 수 있지만, 첫 번째 Scanner는 이미 해당 줄을 읽었으므로 더 이상 읽을 내용이 없다. 따라서 두 번째 Scanner가 사용될 때 입력 스트림에는 이미 남아있는 내용이 없어서 입력을 읽지 못한다. 위의 예시상황에서 sc11을 읽은 후에 줄의 끝에 도달한다. 이후 sc2가 사용될 때 입력 스트림에는 2가 아직 남아있지만, sc1이 이미 줄을 읽어서 sc2는 아무것도 읽을 수 없는 상황이다.

따라서 이와 같이 수정하여야 한다.

import java.io.IOException;
import java.util.Scanner;

public class Sample
{
    public static void main(String[] args) throws IOException
    {
        Scanner sc = new Scanner(System.in);
        int value1 = sc.nextInt();
        int value2 = sc.nextInt();
        System.out.println(value1 + value2);
    }
}

0개의 댓글