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()을 한 번 적어주고 진행하면 된다!