자바에 적응하면서 두 숫자를 입력받고 숫자의 합을 구하는 프로그램을 만들고 있었다.
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가 사용될 때 입력 스트림에는 이미 남아있는 내용이 없어서 입력을 읽지 못한다. 위의 예시상황에서 sc1
이 1을 읽은 후에 줄의 끝에 도달한다. 이후 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);
}
}