//문제부분
// 학생수 입력
if (selectNo == 1) {
System.out.print("학생 수를 입력하세요.");
studentNum = scanner.nextInt();
scores = new int[studentNum];
}
// 점수 입력
else if (selectNo == 2) {
System.out.println("학생의 점수를 입력하세요.");
for (int i = 0; i < scores.length; i++) {
System.out.print((i + 1) + "번의 점수는? ");
scores[i] = scanner.nextInt();
}
}
// 점수 출력
else if (selectNo == 3) {
System.out.println("학생의 점수를 출력합니다.");
for (int i = 0; i < scores.length; i++) {
System.out.print((i + 1) + "학생의 점수는 " + scores[i] + "\t");
}
System.out.println();
}
// 최고 점수 및 평균 출력
else if (selectNo == 4) {
int max = 0;
for (int i = 0; i < scores.length; i++) {
if (scores[i] > max) {
max = scores[i];
}
}
System.out.println("최고 점수는? " + max);
int sum = 0;
double avg = 0;
for (int i = 0; i < scores.length; i++) {
sum += scores[i];
}
avg = sum / studentNum;
System.out.println("평균 점수는? " + avg);
}
// 프로그램 종료
else if (selectNo == 5) {
run = false;
}
switch (select) {
// 학생 수 입력
case 1:
System.out.println("학생 수를 입력해주세요");
studentNum = sc.nextInt();
break;
// 점수 입력 받기
case 2:
System.out.println("점수를 입력해주세요");
scores = new int[studentNum];
for (int i = 0; i < scores.length; i++) {
System.out.print((i + 1) + " 번째 점수 입력 : ");
scores[i] = sc.nextInt();
}
break;
// 입력 받은거 출력하기
case 3:
System.out.println("정보를 출력하겠습니다");
for (int i = 0; i < scores.length; i++) {
System.out.println((i + 1) + " 번 학생은 " + scores[i] + "점 입니다");
}
break;
// 총합, 평균, 최고점
case 4:
System.out.println("계산을 선택하셨습니다");
int hap = 0, ss = 0, max = 0;
// 총합
for (int i = 0; i < scores.length; i++) {
hap += scores[i];
}
// 평균
ss = hap / studentNum;
// 최고점
for (int i = 0; i < scores.length; i++) {
if (scores[i] > max) {
max = scores[i];
}
}
// 출력
System.out.println("합 : " + hap);
System.out.println("평균 : " + ss);
System.out.println("최고점 : " + max);
break;
case 5 :
System.out.println("종료를 선택하셨습니다");
run = false;
break;
}
StudentInput input = new StudentInput();
부분은 생명주기가 짧은 case 안에 넣어주기보다는 그 위에서 해주는 것이 좋은거 같다. 여기처럼 case1 부분 뿐 아니라 다른 곳에서 불러올 수 있으니까.ScoreInput score = new ScoreInput();
도 마찬가지)boolean run = true;
while (run) {
System.out.println("-------------------------------");
System.out.println("1.학생 수 2.점수 입력 3.점수 리스트 4.분석 5.종료");
System.out.println("-------------------------------");
System.out.print("선택 >");
Scanner scanner = new Scanner(System.in);
StudentInput input = new StudentInput();
ScoreInput score = new ScoreInput();
int selectNo = scanner.nextInt();
switch (selectNo) {
// 학생수 입력
case 1:
// StudentInput input = new StudentInput();
input.stNumInput();
break;
// 점수 입력
case 2:
// ScoreInput score = new ScoreInput();
score.ScoreSize(input.studentNum);
// ScoreSize메소드를 사용할건데 값으로
// StudentInput에 있는 studentNum을 사용할 것임
score.ScoreArray();
break;
// 점수 출력
case 3:
ScoreList sl = new ScoreList();
// 점수리스트 객체 선언
sl.ScorePrint(score.scores);
// 출력하는 메소드 호출
break;
// 최고 점수 및 평균 출력
case 4:
List list = new List();
list.List(score.scores, input.studentNum);
break;
// 프로그램 종료
case 5:
run = false;
System.out.println("프로그램 종료");
}
}
StudentInput input = new StudentInput();
선언 해주었고,input.stNumInput();
으로 사용할 메소드를 불러주었다.public class StudentInput {
static int studentNum;
// 다른 클래스에서 필요하기 때문에
// static 변수로 선언
void stNumInput() {
Scanner scanner = new Scanner(System.in);
System.out.print("학생 수를 입력하세요.");
studentNum = scanner.nextInt();
}
}
public class ScoreInput {
Scanner scanner = new Scanner(System.in);
static int[] scores;
// 역시나 다른 클래스에서 사용하기위해
// static 선언을 해주었다.
void ScoreSize(int studentNum) {
scores = new int[studentNum];
}
// 입력받은 학생 수 만큼 배열 크기를 잡아야 함
// case1에서 studentNum을 static 해준 이유가
// 이렇게 다른 곳에서 사용할 수 있게끔 한것이다
int[] ScoreArray() {
for (int i = 0; i < scores.length; i++) {
System.out.println("점수를 입력하세요.");
System.out.print((i + 1) + "번의 점수는? ");
scores[i] = scanner.nextInt();
}
return scores;
}
}
public class ScoreList {
void ScorePrint(int scores[]) {
int sA[] = scores;
System.out.println("점수를 출력합니다.");
for (int i = 0; i < sA.length; i++) {
System.out.print("학생 " + (i + 1) + "의 점수는 " + sA[i]);
System.out.println();
}
}
}
public class List {
int max = 0, sum = 0;
double avg = 0;
// 평균은 적당한 실수형으로 선택해주기
void List(int scores[], int studentNum) {
for (int i = 0; i < scores.length; i++) {
if (scores[i] > max) {
max = scores[i];
}
}
System.out.println("최고 점수 : " + max);
for (int i = 0; i < scores.length; i++) {
sum += scores[i];
}
avg = sum / studentNum;
System.out.println("평균 점수는 : " + avg);
}
}
객체 지향적으로 하는 것이 한 곳에 때려박는 것보다는 깔끔하고 가독성있는 것 처럼 보인다. 부분부분 코드 수정하는 일이 조금은 더 수월한 느낌도 든다. 하지만 어디서 무엇을 불러오는지, 어느 것이 이어지는 지 정확히 알고 있어야 할 것 같다.