자바 nextInt() 다음에 nextLine() 실행 안되는 현상
자바 Scanner 를 이용해서 nextInt() 를 이용해 숫자를 출력하고
nextLine()을 이용해 문장을 출력하려고 하는데, nextLine()이 안되는 현상을 발견했다.
아래 코드를 보자.
public class Main{
public static void main(String[] args) {
// TODO Auto-generated method stub
//이안에서 코드가 작동한다.
Scanner sc=new Scanner(System.in);
int number=sc.nextInt();
String sentence= sc.nextLine();
System.out.print("숫자-> ");
System.out.println(number);
System.out.print("문장 입력-> ");
System.out.println(sentence);
}
}//main 클래스 끝
예상하는 결과는 아래와 같았다.
예상 결과- number에 '3'입력, sentence에 'abcdefg' 입력
---------------------------------------
숫자 -> 3
문장 입력-> abcdefg
---------------------------------------
하지만 결과는
숫자->3
str 입력>
이었다.
숫자를 입력하고 나니까 바로 프로세스가 끝나버렸다.
이유가 뭘까??
원인은 다음과 같았다.
나는 nextInt()에 3을 넣고 nextLine()을 작성하기 위해서 enter키( 개행문자=\n )를 쳤는데,
nextInt()는 개행 문자는 입력 받지 않는다고 한다.
그래서 nextInt()에 3을 넣고 enter키를 치게되면, \n(개행문자)는 버퍼에 남게 되고
nextLine()에서는 내가 문장을 치기전에 입력 버퍼에 남은 \n을 먼저 받아들여 그대로 넘어가는 거였다.
nextLine()은 그 Line 전체를 받기 때문에 \n도 해당 줄에 있는 경우 받는다.
그래서 이 문제를 해결하기 위해 다음과 같이 바꿔보았다.
public class Main{
public static void main(String[] args) {
// TODO Auto-generated method stub
//이안에서 코드가 작동한다.
Scanner sc=new Scanner(System.in);
int number=sc.nextInt();
sc.nextLine();
String sentence= sc.nextLine();
System.out.print("숫자-> ");
System.out.println(number);
System.out.print("str 입력-> ");
System.out.println(sentence);
}
}//main 클래스 끝
int number=sc.nextInt(); 와 String sentence= sc.nextLine(); 사이에
sc.nextLine();을 추가해 -> nextInt()후 남은 \n(개행문자를) sc.nextLine()에 넣어 버리고 버퍼를 비웠다.
그렇게 하니 다시 String sentence= sc.nextLine();에서 입력값을 받을수 있었다.
끝~
개발자가 되기 위해 공부 중인 비전공자 학생입니다.
아직 부족하여, 부족하거나 틀린 내용이 있을수 있으니,
그부분에 대해서 생각을 댓글로 공유해주시면
감사하겠습니다.^^