자바실전_Day_12_01(배열_응용02)
-----------------------------------------------------------------------------------
1번째 예제
●결과값
//#0.Scanner
Scanner scan = new Scanner(System.in);
//#1.변수선언
int student = 0;
int score = 0;
int stop = 0;
int input = 0;
int[] studentArray = new int[student];
int max = 0;
int min = 0;
int sum = 0;
int count = 0;
double avg = 0.0;
//#2.안내 문구 ㅡ 변수입력
while(!(5==stop)) {
info();
input = scan.nextInt();
if(input == 1) {
studentInfo();
student = scan.nextInt();
studentArray = new int[student];
}else if(input == 2) {
for(int i = 0; i<studentArray.length; i++) {
System.out.println((i+1)+"번째 학생 점수 입력 >> ");
studentArray[i] = scan.nextInt();
}
}else if(input == 3) {
for(int i = 0; i<studentArray.length; i++) {
System.out.println(i+"번째 학생 점수 입력 = "+studentArray[i] );
}
}else if(input == 4) {
//조건
for(int i = 0; i<studentArray.length; i++) {
min = Math.min(max, studentArray[i]);
max = Math.max(min, studentArray[i]);
sum += studentArray[i];
count++;
}
//평균
avg = (double)sum/count;
//출력
System.out.println("최고 점수 : " + max);
System.out.println("최저 점수 : " + min);
System.out.println("평균 : " + min);
}else if(input == 5) {
System.out.println("프로그램 종료");
stop = 5;
}else {
System.out.println("잘못 입력하였습니다.");
}
}
}
public static void info() {
System.out.println("============================================================");
System.out.println("1. 학생수 | 2. 점수입력 | 3. 점수리스트 | 4. 분석 | 5. 종료");
System.out.println("============================================================");
System.out.println("번호 선택 >>");
}
public static void studentInfo() {
System.out.println("학생수입력 : ");
}
-----------------------------------------------------------------------------------
2번째 예제
●결과값(동일하지만, 내부적으로 메소드 리팩토링을 했다.) - teacher




//#1. Scanner 객체 생성 - 입력받기 위해
static Scanner scan = new Scanner(System.in); //static이 있어야 된다.
public static void main(String[] args) {
//#2 변수 선언 - 지역변수 {}안에서 사용 할 수 있다.
int studentCount = 0; //학생수
int[] scores = null; //배열은 한 번 크기를 설정하면 변경할 수 없다.
//null - 아직 참조하는 고싱 없다. 힙영역을 참고 있지 않다.
boolean run = true; // while문의 진행 여부를 설정하기 위해 사용
// 값이 true이므로 일단 반복을 진행
// true - 반복(while문 실행), false - 반복(while)종료
//#3.while문을 실행해서 학생수, 점수입력, 점수리스트, 분석등을 진행
while(run) {
//#3-1.메세지가 반복이므로 메세지 부터 설정
System.out.println("========================================================");
System.out.println("1. 학생수 | 2. 점수입력 | 3. 점수리스트 | 4. 분석 | 5. 종료");
System.out.println("========================================================");
System.out.print("번호 선택>>");
int selectNo = scan.nextInt();
//switch(selectNo) { case 1 : 실행; break;.args.clone().}
if(selectNo==1) { //1.학생수
System.out.print("학생수 입력>>");
studentCount = scan.nextInt();
}else if(selectNo==2) { //2.점수입력
//학생수 만큼의 배열 공간을 만들어 주기, 위에서는 null아직 연결을 안한
//상태이므로 여기에서 공간을 확보 필요
scores = new int[studentCount]; //점수를 담을 배열 생성
inputScore(scores);
//inputScore(new in[studentCount]);
}else if(selectNo==3) {//3.점수리스트
scoreList(scores);
}else if(selectNo==4) {//4.분석
showPrint(scores);
}else if(selectNo==5) {//5.종료
//종료
run = false;
}
}//end of while
}
public static void inputScore(int[] scores) {
//배열 공간에 점수 담기-학생 수가 유동적이라 반복문을 사용
for(int i = 0 ; i < scores.length; i++) {
//안내 문구
System.out.println((i+1) + "번 학생 점수 입력>>");
scores[i] = scan.nextInt(); //입력받은 점수 배열에 담기
}//for문의 끝
System.out.println();
}//end of inputScore
public static void scoreList(int[] scores) {
for(int i = 0 ; i < scores.length; i++) {
System.out.println((1+i) + "번 학생 점수 = " + scores[i]);
}//for문의 끝
}
public static void showPrint(int[] scores ) {
int sum = 0; //합계
int max = scores[0]; //최저 점수를 초기화
int min = scores[0]; //최저 점수를 초기화
for(int i = 0; i <scores.length; i++) {
//최댓값
if(max < scores[i]) { //max에 담긴 값이 i번째 요소보다 작으면
max = scores[i]; //max에는 더 큰 i번째 요소 값 담기
}
if(min > scores[i]) { //min에 담긴 값이 i번째 요소보다 크면
min = scores[i]; //min에는 더 작은 i번째 요소 값 담기
}//if문 끝
//합계 - 평균을 구하기 위해서 필요
sum += scores[i]; //점수 누적해서 합계 구하기, sum = sum + scores[i]
}//for문 끝
//평균
double avg = (double)sum/scores.length;
//avg = (double)sum/studentCount;
System.out.println("최고 점수 : "+ max);
System.out.println("최고 점수 : "+ min);
System.out.printf("평균 점수 : %.2f\n",avg);//소수이하 둘쨰자리까지
}