자바 소소한 코딩 질문 [ 배열]

조회수 541회
package javaprac;

import java.util.*;

public class hello {

    public static void main(String[] args) {

        Scanner scan = new Scanner(System.in);

        int num;
        double avg = 0;
        System.out.println("학생수를 입력하시오");
        num = scan.nextInt();

        int score[] = {0};
        for (int i = 0; i < num; i++) {
            System.out.println("학생" + (i + 1) + "의 성적을 입력하세요");
            score[i] = scan.nextInt();

            if (score[i] > 100) {
                System.out.println("다시 입력하시오.");

            }else {

                avg = avg + score[i];
            }
        }

        System.out.println("성적평균은: " + avg / num);
    }
}

코딩 내용은 학생수를 입력받아 학생수만 큼 점수를 입력해서 점수의 평균을 구하는 코딩입니다

학생수를 1명으로 했을떄는 값이 제대로 나오는데 2명 이상일 경우 오류가나오네요 어디가 문제인지 친절히 가르쳐주세요.. 코딩 노베이스라... 죄송합니다.

  • 오류메세지도 올려주시기 바랍니다. 정영훈 2019.12.3 19:26
  • Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1 at javaprac.hello.main(hello.java:19) 강지훈 2019.12.3 19:49

2 답변

  • Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 1 at javaprac.hello.main(hello.java:19)

    상기의 예외 메세지는 배열의 길이가 잘못되어 유효하지 않은 범위를 선택했을때 발생합니다.

    jshell> int score[] = {0};
    score ==> int[1] { 0 }
    

    코드를 보면 1개짜리 배열을 선언했습니다. 그런 관계로 1명 했을때는 정상적으로 배열에 저장이 될 수 있지만 2명째에는 오류가 발생하게 됩니다.

    배열을 늘리던지 배열대신 ArrayList 를 사용하세요.

  • System.out.println("학생수를 입력하시오");
    num = scan.nextInt();
    

    여기서 학생수를 num 변수에 받았으니, 이 값을 사용해서 score 배열 크기를 할당하면 됩니다.

    //int score[] = {0};
    int score[] = new int[num]
    

    이렇게 수정하면 되겠습니다.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)