일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 자바
- 탄력적 ip
- kotlin plugin
- BuildConfig
- git
- AWS
- basic toast
- aws 느림
- git 안드로이드 스튜디오 연동
- nextInt()
- 안드로이드 스튜디오 에러
- error while loading state for instance 0x0 of device 'goldfish_pipe
- git 저장소
- doze mode
- Android
- gitemoji
- ppk to pem
- toastmessage
- 안드로이드
- 이클립스 코틀린
- git commit 해쉬
- 에뮬레이터 에러
- aws 리전 변경
- utf8 인코딩
- E212: Can't open file for writing
- nginx 한글 깨짐
- access modifier
- was server
- 코틀린 플러그인
- 도즈모드
- Today
- Total
리얼라이져의 마케팅, 개발, 창업 블로그
자바 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();에서 입력값을 받을수 있었다.
끝~
개발자가 되기 위해 공부 중인 비전공자 학생입니다.
아직 부족하여, 부족하거나 틀린 내용이 있을수 있으니,
그부분에 대해서 생각을 댓글로 공유해주시면
감사하겠습니다.^^
'IT > 자바' 카테고리의 다른 글
Public, Protected,Private, default 차이점 (0) | 2019.04.11 |
---|