본문 바로가기

language/자바

자바 Scanner nextLine 오류 buffer

Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
String b = sc.nextLine();

이렇게 코드를 짜면 제대로 작동 하지않는다.

 

이유는 이렇다

a에 10을 입력하고 enter를 누르면 enter 값까지 같이 넘어간다.

즉, enter(\n)값이 들어간다. 10\n 이런식이다.

그런데 nextInt()에는 \n을 알아서 제외하고 값을 받아 \n의 입력은 다음으로 넘어간다.

그 넘어간 값이 String b에 자동으로 들어가면서 내가 b를 직접 입력도 전에 코드는 넘어가버린다.

 

 

해결책 1 : 버퍼를 넣는다!

Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
String buffer = sc.nextLine();     //enter값이 여기로 들어가게한다
String b = sc.nextLine();

이렇게 하면 enter(\n)값이 버퍼로 들어가고 다음입력인 b를 할 수 있게된다.

 

 

해결책 2 :

Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
String b = sc.next();

nextLine() 대신에 next()를 쓰는 방법도 있다.

next()는 enter값을 무시하기때문에 따로 버퍼를 쓰지않고 진행할수있다.

 

 

 

 

개행문자 : 컴퓨터에서 줄바꿈을 나타내는 제어문자 ( =새줄문자,줄바꿈문자)

윈도우 - \r\n

유닉스 - \n

맥 - \r

자바에서는 \n 과 \r\n 이렇게 두가지를 줄바꿈으로 인식한다.

'language > 자바' 카테고리의 다른 글

자바 Integer.parseInt() 진수 표현  (0) 2022.01.19
자바 2진수 앞에 0 출력  (0) 2022.01.19
자바 String, StringBuffer, StringBuilder  (0) 2022.01.19
자바 2차원 배열길이 length  (0) 2022.01.19
자바 ArrayList , List  (0) 2022.01.19