YUYANE

JAVA / nextInt( ) 다음에 nextLine( )을 입력 받을 때 생길 수 있는 오류(백준 4344 자바) 본문

Programming Languages/JAVA

JAVA / nextInt( ) 다음에 nextLine( )을 입력 받을 때 생길 수 있는 오류(백준 4344 자바)

YUYA 2020. 11. 20. 16:50

1. Scanner nextLine( )은 문자 '한 줄'을 입력 받아서 읽어들인다.

- '줄 넘김'을 기준으로 입력 받는다.

 

2. Scanner next( )는 문자 '한 단어'씩 읽어들임

- '공백' / ' ' 을 기준으로 입력 받는다.

 

3. nextInt( ) 다음에 nextLine( )을 입력 받을 때 생길 수 있는 오류

 

        int C = scanner.nextInt(); //'5' 입력
         String scores = scanner.nextLine(); //'5 50 50 70 80 100' 입력

 - 예상과 달리 scores의 값은 ""이다. 

 - nextLine( )는 '줄 넘김'을 기준으로 입력을 받는데,

 - int C에 5를 입력 하고 enter(줄 넘김)을 누르면

 - scores 값은 enter를 누르기 이전 값인 ""이 되어버린다.

 

4. 해결하려면, 중간에 줄 넘김을 받도록 코드 한 줄을 추가하자.

        int C = scanner.nextInt();
        scanner.nextLine(); //추가
        String scores = scanner.nextLine();

 

** 백준 4344번 자바 문제풀이 코드

import java.util.Scanner;

public class _4344 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int C = scanner.nextInt();
        float average=0;
        float total=0;
        float count=0;
        float percentage=0;


        for(int p=0; p<C; p++){
            if(p==0)
            scanner.nextLine();
            String scores = scanner.nextLine();
            String scoreslist[] = scores.split(" "); // 모든 점수를 배열로
            for(int i=0; i<scoreslist.length; i++){ //총합 구하기
                if(i==0)
                    continue;
                else{
                    total+=Integer.parseInt(scoreslist[i]);
                }
            }
            average = total/ Integer.parseInt(scoreslist[0]); //70
            for(int i=1; i< scoreslist.length; i++){ //평균보다 높은 값
                if(Integer.parseInt(scoreslist[i])>average)
                    count++; //2
            }
            int people = Integer.parseInt(scoreslist[0]);
            percentage=100*count/people;
            System.out.println(String.format("%.3f",percentage)+"%");
            total=0;
            count=0;
        }
    }
}
Comments