코딩 과제를 하다가 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();
 
    }
}
 

cs


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번방법이 좋아보인다.




참고

http://allg.tistory.com/17

+ Recent posts