오류, 기능, 문제해결(JAVA)

2차원 배열 연습

seungmin576 2024. 12. 27. 17:34

김영한님 자바 입문 강의 문제 마우스 커서가 가린곳은 4명임

 

  • 내가 생각해본 코드
package twodimensionarray;

import java.util.Scanner;

public class Grade {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int[][] list = new int[4][3];
        int korean = 0;
        int eng = 0;
        int math = 0;

        for (int i = 0; i < list.length; i++) {
            int total = 0;	//반복할때마다 총합과 평균을 계속 0으로 초기화 해줌
            double avg = 0;

            System.out.println((i + 1) + "번 학생의 성적을 입력하세요");
            System.out.print("국어 점수 : ");
            korean = sc.nextInt();
            System.out.print("수학 점수 : ");
            eng = sc.nextInt();
            System.out.print("영어 점수 : ");
            math = sc.nextInt();
            for (int j = 0; j < list[j].length; j++) {
                if(j == 0)	//첫번째 열 일때
                list[i][j] = korean;
                else if (j == 1) {	//두번쨰 열 일때
                    list[i][j] = eng;
                }
                else	//세번째 열 일때
                    list[i][j] = math;
                    total += list[i][j];
                    avg = (double) total / 3;
            }
            System.out.println((i + 1) + "번 학생의 총점 :" + total + ", 평균 : " + avg);
        }
    }
}

동작은 정상적이지만 문제가 원하는 결과 화면과는 다르게 나옴.

왜냐하면 총점과 평균을 출력하는 부분을 같은 반복문 안에 적었기 때문이다.

아마 반복문을 또 밑에 따로 작성하여 그 안에 총점과 평균을 출력하게 하면 해결될 듯하다.

 

package twodimensionarray;

import java.util.Scanner;

public class GradeAnswer {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int[][] list = new int[4][3];
        String[] object = {"국어", "수학", "영어"};

        for (int i = 0; i < list.length; i++) {
            System.out.println((i + 1) + "번 학생의 성적을 입력하세요 :");
            for (int j = 0; j < list[j].length; j++) {
                System.out.print(object[j] + " 점수 : ");
                int iNum = sc.nextInt();
                list[i][j] = iNum;
            }
        }

        for (int i = 0; i < list.length; i++) {
            int total = 0;
            double avg = 0;
            for (int j = 0; j < list[j].length; j++) {
                total += list[i][j];
                avg = total / 3.0;
            }
            System.out.println((i + 1) + "번 학생의 총점 : " + total + ", 평균 : " + avg);
        }
    }
}

 

문자열 배열 object를 선언한뒤 {국어, 수학, 영어}로 초기화 하고 첫번째 for문 안의 중첩 for문(int j)에서 list 배열 열의 길이(3) 만큼 반복하니 {국어, 수학, 영어} + 점수가 출력된다.

그리고 사용자가 입력하는 정수를 iNum에 대입하고

대입된 정수들(iNum)을 list에 대입한다.

 

두번째 for문에서 total과 avg를 선언하고 0으로 초기화해 반복문이 반복될 동안 계속 0으로 초기화 하게 만든다.

그리고 안의 중첩 반복문에서 total에 list의 값들을 대입해 더하여 국어, 수학, 영어의 점수의 총합이 되게 하고, 평균값을 avg로 낸뒤 중첩 반복문을 빠져나와서 for문 마지막에 학생들의 총점과 평균을 출력한다.

이렇게 되면 출력한뒤 다시 반복문을 진행할때 아까 위에 적은 것 처럼 다시 총점과 평균이 0으로 초기화 되니 각자 학생에 맞는 총점과 평균이 출력된다.

(avg는 위에 따로 0으로 초기화 안해도 반복문이 반복될 때마다 total이 0으로 초기화 된뒤 다시 학생별로 과목별 총합 점수를 더하고 avg에 대입되기 때문에 계속 올바른 값이 나온다.)