import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int num;
String str;
System.out.print("num입력: ");
num = sc.nextInt();
System.out.print("str입력: ");
str = sc.nextLine();
System.out.println("num:"+num);
System.out.println("str:"+str);
sc.close();
}
}
출력결과
num입력: 10
str입력:num: 10
str:
원래 원했던 입력은 숫자 1번 문자 1번 이었지만 숫자1번 입력하면 바로 출력된다. 그 이유는?
next()는 개행문자를 무시하고 입력받고 nextLine()은 한줄 단위로 입력을 받기 때문에 개행문자로 포함된다.
좀 더 직관적으로 설명하자면 위처럼 5를 입력하고 Enter를 쳤다면 버퍼에 5\n이 존재한다. 이 때 nextInt()가 버퍼의 내용을 가져올 때 분리자를 제외하고 가져오기 때문에 5만 가져오게 된다. 그러면 버퍼에 \t가 남아있는데 nextLine()은 공백문자, 개행문자인 분리자를 포함시키기 때문에 \t만 가져오고 프로그램이 종료되는 것이다.