JAVA/문제풀이
배열 middleTest
inderrom
2022. 9. 23. 02:11
package middleTest;
import java.util.Arrays;
import java.util.Random;
public class 선새롬 {
public static void main(String[] args) {
// 1. 6명의 이름을 저장할 수 있는 변수 names를 선언 및 생성하고, 주변 친구들의 이름으로 초기화한다. (5점)
String[] names = { "유재석", "박명수", "정준하", "정형돈", "하하", "노홍" };
// 2. 7과목의 이름을 저장할 수 있는 변수 subjects를 선언 및 생성하고, 국어, 영어, 수학, 사회, 과학, Java, Oracle로 초기화한다. (5점)
String[] subjects = { "국어", "영어", "수학", "사회", "과학", "Java", "Oracle" };
// 3. 6명의 7과목의 점수(정수)를 저장할 수 있는 변수 score를 선언 및 생성한다. (5점)
// (단, names와 subjects의 길이를 이용한다.)
int[][] score = new int[names.length][subjects.length];
// 4. score의 모든 요소에 50~100 사이의 임의의 값(정수)을 저장한다. (5점)
for (int i = 0; i < score.length; i++) {
for (int j = 0; j < score[i].length; j++) {
score[i][j] = new Random().nextInt(51) + 50;
}
System.out.println(Arrays.toString(score[i]));
}
// 5. 학생별 합계를 저장할 수 있는 변수 nameSum을 선언 및 생성한다. (5점)
// (단, names의 길이를 이용한다.)
int[] nameSum = new int[names.length];
// 6. nameSum의 요소에 훈련생별 합계를 저장한다. (5점)
for (int i = 0; i < names.length; i++) {
for (int j = 0; j < subjects.length; j++) {
nameSum[i] += score[i][j];
}
System.out.println(Arrays.toString(nameSum));
}
// 7. 학생별 평균(실수)을 저장할 수 있는 변수 nameAvg를 선언 및 생성한다. (5점)
// (단, names의 길이를 이용한다.)
double[] nameAvg = new double[names.length];
// 8. nameAvg의 요소에 학생별 평균(실수)을 저장한다. (5점)
// (단, 평균은 소수점 세 번째 자리에서 '반올림'하여 두 번째 자리까지 저장한다.)
// nameSum / subjects.length
//바깥포문은 평균 6개
for (int i = 0; i < nameSum.length; i++) {
nameAvg[i] = (double) nameSum[i] / (double) subjects.length;
nameAvg[i] = Math.round(nameAvg[i] * 100) / 100.0;
}
// 9. 과목별 합계를 저장할 수 있는 변수 subSum을 선언 및 생성한다. (5점)
// (단, subjects의 길이를 이용한다.)
int[] subSum = new int[subjects.length];
// 10. subSum의 요소에 과목별 합계를 저장한다. (5점)
for (int i = 0; i < subjects.length; i++) {
for (int j = 0; j < names.length; j++) {
subSum[i] += score[j][i];
}
}
System.out.println(Arrays.toString(subSum));
// 11. 과목별 평균(실수)을 저장할 수 있는 변수 subAvg를 선언 및 생성한다. (5점)
// (단, subjects의 길이를 이용한다.)
double[] subAvg = new double[subjects.length];
// 12. subAvg의 요소에 과목별 평균(실수)을 저장한다. (5점)
// (단, 평균은 소수점 세 번째 자리에서 '반올림'하여 두 번째 자리까지 저장한다.)
for (int i = 0; i < subSum.length; i++) {
subAvg[i] = (double) subSum[i] / (double) names.length;
subAvg[i] = Math.round(subAvg[i] * 100) / 100.0;
}
//
// 13. 학생별 석차를 저장할 수 있는 변수 rank를 선언 및 생성한다. (5점)
// (단, names의 길이를 이용한다.)
int[] rank = new int[names.length];
// 14. rank의 요소에 합계를 기준으로 훈련생별 석차를 저장한다. (15점)
for (int i = 0; i < names.length; i++) {
rank[i] = 1;
}
for (int i = 0; i < names.length; i++) {
for (int j = 0; j < names.length; j++) {
if (nameSum[i] < nameSum[j]) {
rank[i]++;
}
}
}
// for(int i = 0; i < rank.length; i++) {
// rank[i] = 1;
// }
// for(int i = 0; i < rank.length; i++) {
// for(int j = 0; j < rank.length; j++) {
// if(nameSum[i] < nameSum[j]) {
// rank[i]++;
// }
// }
// }
// 15. 위에서 생성된 변수들을 이용하여 아래와 같이 출력한다.(구분선 제외) (20점)
// ====================================================================================
// | 국어 영어 수학 사회 과학 Java Oracle | 합계 평균 석차
// --------┼-------------------------------------------------------┼-------------------
// 김범수 | 95 55 73 64 53 68 96 | 504 72.0 4
// 나얼 | 74 81 97 64 59 89 74 | 538 76.86 1
// 박효신 | 80 50 55 51 63 82 85 | 466 66.57 6
// 이수 | 99 59 84 99 55 68 72 | 536 76.57 2
// 신용재 | 51 82 53 76 91 64 93 | 510 72.86 3
// 하현우 | 84 67 73 79 55 61 73 | 492 70.29 5
// --------┼-------------------------------------------------------┼-------------------
// 합계 | 483 394 435 433 376 432 493 |
// 평균 | 80.5 65.67 72.5 72.17 62.67 72.0 82.17 |
// ====================================================================================
System.out.println("===================================================================================");
System.out.print("\t");
for (int i = 0; i < subjects.length; i++) {
System.out.print(subjects[i] + "\t");
}
System.out.print("합계\t" + "평균\t" + "석차");
System.out.println();
for (int i = 0; i < names.length; i++) {
System.out.print(names[i] + "\t");
for (int j = 0; j < subjects.length; j++) {
System.out.print(score[i][j] + "\t");
}
System.out.print(nameSum[i] + "\t" + nameAvg[i] + "\t" + rank[i]);
System.out.println();
}
System.out.println();
System.out.print("합계\t");
for (int i = 0; i < subSum.length; i++) {
System.out.print(subSum[i] + "\t");
}
System.out.println();
System.out.print("평균\t");
for (int i = 0; i < subAvg.length; i++) {
System.out.print((Math.round(subAvg[i] * 100) / 100.0) + "\t");
}
// (optional. 15번까지 완성했다면, 도전해보세요.)
// 추가1. 사용자에게 학생을 추가할 것인지 물어보고 (y/n) (+10점)
// 사용자가 학생 추가를 원한다면 학생의 이름을 입력받아 학생의 일곱 과목 점수를 랜덤으로 부여합니다.
// 학생을 계속 입력할 것 인지 물어보고(y/n). 계속 입력을 받거나 중단합니다.
// 새로 추가된 학생의 점수를 포함하여 계산된 총 출력을 다시 보여줍니다.
// 추가2. 사용자에게 과목을 추가할 것인지 물어보고 (y/n) (+10점)
// 사용자가 과목 추가를 원한다면 과목의 이름을 입력받아 과목을 추가하고 학생들의 점수는 랜덤 부여합니다.
// 새로 추가된 과목의 점수를 포함하여 계산된 총 출력을 다시 보여줍니다.
// 추가3. 과목 및 합계, 평균, 석차 중에 사용자가 선택하여 정렬할 수 있는 기능을 만들어보세요. (+15점)
// (단, 과목 및 합계, 평균은 내림차순으로 / 석차는 오름차순으로(1등이 맨 위로))
// (단, 정렬 기준에 * 표시를 해둔다)
// 예시)
// 정렬할 대상을 선택해주세요.
// 1.국어 2.영어 3.수학 4.사회 5.과학 6.Java 7.Oracle 8.합계 9.평균 10.석차
// 선택 >> 10
// ====================================================================================
// | 국어 영어 수학 사회 과학 Java Oracle | 합계 평균 석차*
// --------┼-------------------------------------------------------┼-------------------
// 나얼 | 74 81 97 64 59 89 74 | 538 76.86 1
// 이수 | 99 59 84 99 55 68 72 | 536 76.57 2
// 신용재 | 51 82 53 76 91 64 93 | 510 72.86 3
// 김범수 | 95 55 73 64 53 68 96 | 504 72.0 4
// 하현우 | 84 67 73 79 55 61 73 | 492 70.29 5
// 박효신 | 80 50 55 51 63 82 85 | 466 66.57 6
// --------┼-------------------------------------------------------┼-------------------
// 합계 | 483 394 435 433 376 432 493 |
// 평균 | 80.5 65.67 72.5 72.17 62.67 72.0 82.17 |
// ====================================================================================
// 추가4. 특정 학생의 특정 과목 점수를 수정할 수 있는 기능을 만들어보세요. (+20점)
// 예시)
// 점수를 수정하시겠습니까? (y/n) >> y
// 학생이름을 입력하세요 >> 하현우
// 과목명을 입력하세요 >> 과학
// 점수를 입력하세요 >> 100
// ====================================================================================
// | 국어 영어 수학 사회 과학 Java Oracle | 합계 평균 석차*
// --------┼-------------------------------------------------------┼-------------------
// 나얼 | 74 81 97 64 59 89 74 | 538 76.86 1
// 하현우 | 84 67 73 79 100 61 73 | 537 76.71 2
// 이수 | 99 59 84 99 55 68 72 | 536 76.57 3
// 신용재 | 51 82 53 76 91 64 93 | 510 72.86 4
// 김범수 | 95 55 73 64 53 68 96 | 504 72.0 5
// 박효신 | 80 50 55 51 63 82 85 | 466 66.57 6
// --------┼-------------------------------------------------------┼-------------------
// 합계 | 483 394 435 433 421 432 493 |
// 평균 | 80.5 65.67 72.5 72.17 70.17 72.0 82.17 |
// ====================================================================================
- 추가 문제는 실력을 좀 더 쌓고 필히 풀어볼 것 ,,