코딩 과제를 하다가 scan.nextLine()이 분명 있는데 값을 받지 않고 넘어가는 경우가 생겼다.
알아보니 scan.nextLine() 앞에 있는 nextInt()때문이었다.
nextInt()는 정수형을 입력 받는 메소드인데 사용자가 입력할 때 ' ex) 10을 치고 엔터를 눌렀다 ' 엔터 앞부분까지만 입력 받는다. ( 이 경우 10까지만)
즉 개행문자를 제거하지 않아 그 다음 나오는 nextLine()이 개행문자(엔터)를 받게 된다.
간단한 내용이지만 모르면 해맬 수 있어 정리를 해 놓는다.
문제 상황
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | import java.util.Scanner; public class Problem { public static void main(String[] args) { Scanner scan = new Scanner(System.in); int num; String str; System.out.print("num 입력 = "); num = scan.nextInt(); // 10입력 System.out.print("str 입력 = "); str = scan.nextLine(); // 분명 이 줄이 있는데 값을 받지 않고 넘어가 진다. System.out.println(); System.out.println("num : " + num); System.out.println("str : " + str); scan.close(); } } |
num 입력 = 10
str 입력 =
num : 10
str :
해결방법
1. nextInt() 뒤에 nextLine을 추가
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | import java.util.Scanner; public class Problem { public static void main(String[] args) { Scanner scan = new Scanner(System.in); int num; String str; System.out.print("num 입력 = "); // 10 입력 num = scan.nextInt(); scan.nextLine(); // 추가된 nextLine() 개행문자를 받는다. (제거한다) System.out.print("str 입력 = "); str = scan.nextLine(); // 문제없이 입력을 받는다. hello 입력 System.out.println(); System.out.println("num : " + num); System.out.println("str : " + str); scan.close(); } } | cs |
num 입력 = 10
str 입력 = hello
num : 10
str : hello
2. nextLine()을 입력 받아 형변환 하기
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 | import java.util.Scanner; public class Problem { public static void main(String[] args) { Scanner scan = new Scanner(System.in); int num = 0; // 지역변수라 초기화 필요 String str; System.out.print("num 입력 = "); try { num = Integer.parseInt(scan.nextLine()); // 형변환을 한다 10입력 } catch(NumberFormatException e) { System.out.println("정수를 입력해!"); } System.out.print("str 입력 = "); str = scan.nextLine(); // hello 입력 System.out.println(); System.out.println("num : " + num); System.out.println("str : " + str); scan.close(); } } | cs |
num 입력 = 10
str 입력 = hello
num : 10
str : hello
3. 새로운 Scanner 객체 생성
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | import java.util.Scanner; public class Problem { public static void main(String[] args) { Scanner scanI = new Scanner(System.in); // int를 받는 스캐너 Scanner scanS = new Scanner(System.in); // String을 받는 스캐너 int num; String str; System.out.print("num 입력 = "); num = scanI.nextInt(); System.out.print("str 입력 = "); str = scanS.nextLine(); System.out.println(); System.out.println("num : " + num); System.out.println("str : " + str); scanI.close(); scanS.close(); } } | cs |
num 입력 = 10
str 입력 = hello
num : 10
str : hello
간단하게 1번이나 아님 정수형 요청시 예외 값을 처리 할 수 있는 2번방법이 좋아보인다.
참고
'java' 카테고리의 다른 글
자바[JAVA] 객체지향언어 클래스와 객체 (0) | 2018.09.09 |
---|---|
자바[JAVA] JVM heap영역의 구조와 Garbage Collection (0) | 2018.08.28 |
자바[java] 다형성 (4) | 2018.07.12 |
자바[java] 예외처리 (2) | 2018.07.10 |
자바[java] 원하는 반복문 탈출,이름 붙은 반복문 (0) | 2018.07.09 |