package array;
import java.util.Scanner;
public class Ex7 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int student_count = 4;
String[] subject = {"국어", "영어", "수학"};
int subject_count = subject.length;
int total_index = subject.length;
int[][] point = new int[student_count][subject_count+1];
for (int i = 0; i < point.length; i++) {
System.out.println((i+1) + "번 학생의 성적을 입력하세요:");
for (int z = 0; z < subject_count; z++){
System.out.print(subject[z] + " 점수: ");
point[i][z] = scanner.nextInt();
point[i][subject_count] += point[i][z];
}
}
for (int i = 0; i < point.length; i++){
System.out.println((i+1) + "번 학생의 총점:" + point[i][total_index ] +", 평균: " + ((double) point[i][total_index ]/subject_count));
}
}
}
안녕하세요. 배열 문제 풀이 2, 2차원 배열1 문제에서
선생님과 다른 풀이 방법으로 접근해보았습니다.
기존 4x3 대신 칼럼을 하나 더 추가해 마지막 칼럼을 총점수를 저장하는 방법을 사용하였습니다.
의도는 이러합니다.
- 필요에 따라 학생수와 과목수를 추가함에 따라 for문을 변경하지 않아도 되도록 하고싶었습니다.
- 칼럼을 하나 더 추가해 마지막 칼럼에 총점을 저장하는 방식을 사용하고 싶었습니다.
- 확장성과 유지 보수 측면에서 좀 더 간편했으면 싶었습니다.
여기서 발생한 문제점은 다음과 같습니다.
- 개인적으로 느끼기엔 가독성이 선생님의 코드보다 떨어져보인다.
- 가독성을 높이기 위해 선언한 변수가 비효율적이다. (int total_index = subject.length;
)
total_score[] 배열을 하나 더 만들어서 저장하는게 더 나을까요?
제 아이디어와 코드가 어떤지 리뷰를 들어보고 싶습니다!
안녕하세요. Woo Jay님, 공식 서포터즈 y2gcoder입니다.
한 배열에 각 과목의 점수와 총점을 같이 저장하기 위해 고민하신 결과물이라 생각합니다 🙂
말씀해주신 대로 배열에 계산 결과까지 같이 저장하면 총점 계산 시 바로 결과를 호출할 수 있다는 장점이 있을 것 같습니다!
다만 상황에 따라 다르겠지만 저는 해당 데이터를 저장하는 배열에 계산 로직 결과 또한 들어가는 것이 유지보수하기 더 좋은가? 에 대한 고민이 들 것 같습니다!
총점을 보여줄 필요가 없고 전체 과목에 대한 평균 점수를 보여줘야 한다면?
위와 같은 요구사항이 생겼을 때, 지금은 각 과목 점수가 들어간 배열을 수정해야 할 것 같습니다! 계산 로직만 따로 분리해뒀을 때는 나중에 위와 같은 요구사항이 생겼을 때 데이터가 들어간 배열은 수정할 필요 없이 계산 로직만 추가/수정/제거하면 된다는 점을 생각해볼 수 있을 것 같습니다!
한 학생의 과목 점수를 잘못 입력했기 때문에 정정해줘야 한다면?
계산로직이 따로 있을 때는 데이터 배열에 들어간 과목 점수만 변경해주면 됩니다. 하지만 계산 결과가 같이 있는 배열에서는? 최소한 추가적으로 그 학생의 과목점수를 변경하는 기능 외에, 총점을 다시 계산해서 넣어주는 로직 또한 존재해야 할 것 같습니다!
감사합니다.
답글