반응형

nextint() 입력 후 nextLine()을 사용 시에 입력관련 오류가 생긴다.

 

이유는 콘솔 입력시에 엔터키를 입력 했을 때만 지금까지 눌렀던 내용이 버퍼에 전달되어 저장이 되는데, nextInt의 메서드

는 int값만 가져간 후 구분자를 받지 않는다.

때문에 이후 \n의 구분자를 통해 입력을 구분하는 nextLine메서드를 사용할 경우 해당 부분에서 문제가 생긴다. nextLine의 첫번째 입력을''\n의 상태로 입력을 받는 것이다.

 

아래는 해당 부분의 코드 예제이다.

1
2
3
4
5
6
7
8
9
        Scanner sc = new Scanner(System.in);
        int n;
        n = sc.nextInt();
        
        String[] s = new String[n];
            
        for(int i = 0; i < n; i++) {    
            s[i] = sc.nextLine(); // 이 부분에서 s[0]에 ''가 저장이된다.
        }
cs

이러한 오류를 해결할 방법은 알아본 바로는 두가지가 있는데,

 

첫번째는 

1
2
3
4
5
6
7
8
9
10
        Scanner sc = new Scanner(System.in);
        int n;
        n = sc.nextInt();
        sc.nextLine();//해당부분 줄     
        
        String[] s = new String[n];
            
        for(int i = 0; i < n; i++) {    
            s[i] = sc.nextLine(); // 이 부분에서 s[0]에 ''가 저장이된다.
        }
cs

이렇게 nextLine()을 한줄 추가해서 방지하는 것과

 

 

1
2
3
4
5
6
7
8
9
        Scanner sc = new Scanner(System.in);
        int n;
        n = n = Integer.parseInt(sc.nextLine());//nextLine을 사용해서 int형식 
        
        String[] s = new String[n];
            
        for(int i = 0; i < n; i++) {    
            s[i] = sc.nextLine(); // 이 부분에서 s[0]에 ''가 저장이된다.
        }
cs

위와 같이 아예 nextLine()을 통해 int형을 입력받는 방법이다.

 

가장 깔끔한 방법은 두번째 방법인 듯 하다.

 

문제풀다가 멘붕와서 서치한 내용을 토대로 정리 완!

 

요약 : nextInt에는 \n의 개행문자가 들어가지 않음. 때문에 다음 nextLine사용 시 해당 enter(\n)구분자를 가져가기에
nextLine을 바로 아랫줄에 넣어 초기화 시켜주거나 Integer.parseInt(sc.nextLine());의 형식으로 입력을 받아야 함

반응형

+ Recent posts