nextLine() 사용 시 발생하는 오류 해결하기

myminimin·2023년 7월 12일
0

JAVA

목록 보기
2/21

  • 오류를 수정하기 전
System.out.println("주소 입력해주세요. ex. 서울시 강남구");
			System.out.print(" >> ");
			String add = sc.next(); 
			System.out.println("핸드폰 번호를 입력해주세요. (- 포함)");
			System.out.print(" >> ");
			String tel = sc.next();
			System.out.println("생년월일을 입력해주세요. ex)940408 ");
			System.out.print(" >> ");
			String birth = sc.next();

java 실습 프로젝트 중 핸드폰 번호를 입력하지 않았는데 자꾸 생년월일로 바로 넘어가는 오류가 발생했다. 도대체 뭐가 문제인건가 계속해서 검색해봤는데 알고보니 Scanner 클래스의 동작 방식과 관련이 있었다!

Scanner 클래스의 nextLine() 메서드는 한 줄 전체를 입력으로 받기 때문에 공백 문자나 개행 문자를 포함한 문자열을 모두 입력받을 수 있다. 그러나 이로 인해 이전에 다른 next() 메서드를 사용한 후 nextLine()을 호출하는 경우 개행 문자(\n)가 남아있을 수 있어서 원하는 입력이 정상적으로 이루어지지 않는 오류가 발생할 수 있다... ㅠㅠ
** nextLine() 사용하기 전에 nextInt()를 쓴 경우에도 이 오류가 발생하는데 이건 제일 밑에 해결방법이 있다!

나 같은 경우에는 주소를 입력받은 후에 바로 핸드폰 번호를 입력받는 상황에서 이러한 오류가 지속적으로 발생하여 정상적인 입력이 이루어지지 않았고 이를 해결하기 위해 아래와 같은 방법을 사용했다.

System.out.println("주소 입력해주세요. ex. 서울시 강남구");
System.out.print(" >> ");
sc.nextLine(); // 개행 문자 소비
String add = sc.nextLine();

System.out.println("핸드폰 번호를 입력해주세요. (- 포함)");
System.out.print(" >> ");
String tel = sc.nextLine();

위와 같이 sc.nextLine()을 추가하여 개행 문자를 소비한 후에 주소를 입력받으면, 핸드폰 번호 입력으로 넘어갈 때 개행 문자가 올바르게 처리되어 정상적으로 입력을 받을 수 있다.

이와 같은 방법으로 오류를 해결하면 주소 입력 후에 핸드폰 번호 입력으로 자연스럽게 넘어갈 수 있다!!!

오늘 실습을 하는데 또 똑같은 문제가 발생해서 오류 해결한 것도 첨부한다 !

이렇게 제목과 내용이 붙어서 출력이 되는데
이 코드를

private void Update(BoardDTO bdto) { 
		System.out.println("[수정할 내용을 입력]");
		System.out.print("제목 : ");
		bdto.setBtitle(bm.in.nextLine()); 
		System.out.print("내용 : ");
		bdto.setBcontent(bm.in.nextLine());
		System.out.print("작성자 : ");
		bdto.setBwriter(bm.in.nextLine());
		

이렇게 변경하면

private void Update(BoardDTO bdto) { 
		System.out.println("[수정할 내용을 입력]");
		System.out.print("제목 : ");
        bm.in.nextLine(); // 추가
		bdto.setBtitle(bm.in.nextLine()); 
		System.out.print("내용 : ");
		bdto.setBcontent(bm.in.nextLine());
		System.out.print("작성자 : ");
		bdto.setBwriter(bm.in.nextLine());
		

이렇게 입력이 잘 된다!

nextInt() 이후에 nextLine()을 쓰는 경우에도 발생하는 오류


이런식으로 nextInt() 아래에 nextLine()을 한 번 적어주고 진행하면 된다!

0개의 댓글