간단한 입출력 예제를 실행하는데, nextLine()이 실행이 안되고 바로 개행이 되는 문제가 생겼다!
import java.util.Scanner;
public class TestChapter2 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("이름: ");
String name = scanner.nextLine();
System.out.print("주민번호 앞 6자리: ");
int card = scanner.nextInt();
System.out.print("전화번호: ");
String tel = scanner.nextLine();
System.out.printf("%s\n%d\n%s",name,card,tel);
}}
위와같이 nextLine(), nextInt(), nextLine()이 번갈아가며 입력을 받게 할때, 이름과 주민번호 앞 6자리와 전화번호까지 입력을 해야하는데
이름과 주민번호까지만 입력이 가능하고 이후론 입력을 받지 않는것이다.
문법엔 문제가 없다고 생각했는데, 이유를 알아보니 버퍼와 관련된 문제였다
모두 nextLine()으로 바꿔주면 해결
덧붙여, 간단하게 요약하자면
nextLine() : 개행문자까지 읽음
따라서 위와같이 공백도 같이 읽는것이 nextLine인것
next() : 공백 전까지 읽음
위와같이 공백전까지 읽는것이 next인것!
next()와 nectLine()을 순서대로 반환하면
이렇게 된다. 설명하자면 공백 전까지인 "안녕하세요"를 next()가 출력시키고, 그 이후 공백+"같이 공부해여!!"를 nextLine()이 출력시킨다.
아까와 같이 next()를 반복하다가 nextLine()을 하면 nextLine()은 입력받지 않을것임. 왜냐하면 공백전까지만 읽으므로 \n이 세번 쌓여있으니까 \n직전의 아무것도 없는것을 읽음