Daily coding
Java Basic : day 5 - Example 01 : 성적통계 프로그램 만들기(Sorting, 중복제거 ) 본문
Language/Java_basic
Java Basic : day 5 - Example 01 : 성적통계 프로그램 만들기(Sorting, 중복제거 )
sunnnkim 2019. 11. 22. 19:12package day5;
import java.util.Scanner;
public class Ex01_2dArrayExample {
public static void main(String[] args) {
/*
성적 통계 프로그램 만들기
1. 몇 명의 학생의 성적을 입력할 것인지 입력받기
-----------------------------------
예시 : 1 홍길동 90 85 100
(row : 입력받기, column 4)
- 2차원 배열 : String[관리하는 학생의 수][입력받을 점수 및 이름]
2. 이름, 국어, 영어, 수학 입력받기
각 학생의 총점 : sum;
전체 총점 : allSum;
총점의 1등 : max;
총점의 꼴지 : min;
*/
Scanner sc= new Scanner(System.in);
// 선언
String stuGrade[][]; // 학생의 점수 데이터
int stuNum;
int sum[]; // 각 학생의 총점
int allSum = 0; // 전체 학생의 총점
int max = 0; // 총점의 1등
int min = 0; // 총점의 꼴지
String input; // 입력값은 모두 String으로 우선 받아둔다.
int n; // 입력값(charAt) 검사용 변수
// 초기화
allocation:
while(true) {
System.out.println("몇 명의 학생의 점수를 입력하시겠습니까?");
System.out.print(">> ");
input = sc.next();
for (int i = 0; i < input.length(); i++) {
n = input.charAt(i);
if( n <48 || n > 57) {
System.out.println("잘못 입력했습니다.");
continue allocation;
}
}break;
}
stuNum = Integer.parseInt(input);
stuGrade = new String [stuNum][4];
sum = new int[stuNum]; // 학생 수에 맞는 각각 학생의 총점
int w = 0;
outer:
while(w < stuGrade.length) {
// w번째 학생의 데이터 입력
System.out.print((w+1)+"번째 학생의 이름 : ");
stuGrade[w][0] = sc.next();
System.out.print((w+1)+"번째 학생의 국어 점수 : ");
stuGrade[w][1] = sc.next();
System.out.print((w+1)+"번째 학생의 영어 점수 : ");
stuGrade[w][2] = sc.next();
System.out.print((w+1)+"번째 학생의 수학 점수 : ");
stuGrade[w][3] = sc.next();
// 점수가 잘 들어왔는지 검사
for (int i = 0; i < stuGrade[w].length; i++) {
for (int j = 0; j < stuGrade[w][i].length(); j++) {
n = stuGrade[w][i].charAt(j);
if((n<48 || n>57) && i != 0 ) {
System.out.println("점수를 잘못 입력했습니다. 다시입력하시오.");
continue outer;
}
}
}
w++;
}
// 처리
// 1. 학생의 총점
for (int i = 0; i < sum.length; i++) {
for (int j = 1; j < stuGrade[0].length; j++) {
sum[i] += Integer.parseInt(stuGrade[i][j]);
}
}
// 2. 전체 학생의 총점
for (int i = 0; i < sum.length; i++) {
allSum += sum[i];
}
// 3. 총점의 1등 (max)
int markMax =0;
int markMin =0;
max = sum[0];
for (int i = 1; i < sum.length; i++) {
if(sum[i] > max) {
max = sum[i];
markMax = i;
}
}
min = sum[0];
for (int i = 1; i < sum.length; i++) {
if(sum[i] < min) {
min = sum[i];
markMin = i;
}
}
// 4. 각 학생 점수의 sorting
String sortGrade[][] = new String[stuNum][2];
for (int i = 0; i < sortGrade.length; i++) {
sortGrade[i][0] = stuGrade[i][0];
sortGrade[i][1] = Integer.toString(sum[i]);
}
String[] temp;
for (int i = 0; i < sortGrade.length-1; i++) {
for (int j = i+1; j < sortGrade.length; j++) {
if( Integer.parseInt(sortGrade[i][1]) < Integer.parseInt(sortGrade[j][1]) ) {
temp = sortGrade[i];
sortGrade[i] = sortGrade[j];
sortGrade[j] = temp;
}
}
}
// 결과 출력
// 1. 모든 학생 출력
System.out.println(" 번호\t이름\t국어\t영어\t수학");
for (int i = 0; i < stuGrade.length; i++) {
System.out.print(" "+(1+i)+ "\t");
for (int j = 0; j < stuGrade[0].length; j++) {
System.out.print(stuGrade[i][j]+ "\t");
}System.out.println();
}
// 2. 각 학생의 총점
for (int i = 0; i < sum.length; i++) {
System.out.println(stuGrade[i][0] + "학생 총점 : " + sum[i]);
}
// 3. 전체 학생의 총점
System.out.println("------------------ 전체 학생의 총점 :" + allSum + "점");
// 4. 성적 순으로 출력
System.out.println("< 전체 등수 >");
for (int i = 0; i < sortGrade.length; i++) {
System.out.println(1+i + "등: " +sortGrade[i][0]+" 학생, "+sortGrade[i][1] + "점");
}
// 5. max
System.out.println("-------------------------------------");
System.out.println("총점 1등 : " + stuGrade[markMax][0] + " 학생 "+ max+"점");
// 6. min
System.out.println("총점 꼴지 : " + stuGrade[markMin][0] + " 학생 "+ min+"점");
}
}
'Language > Java_basic' 카테고리의 다른 글
Java Basic : day 5 - Example 03 : 학생성적 프로그램 (내코드) (0) | 2019.11.22 |
---|---|
Java Basic : day 5 - Example 02 : 학생 성적입력 프로그램(sorting) (0) | 2019.11.22 |
Java Basic : day 5 - 정렬 프로그램 짜기(sorting program) (0) | 2019.11.22 |
Java Basic : day 5 - 정렬 Sorting (비교정렬) (0) | 2019.11.22 |
Java Basic : day 5 - Shuffle (카드 섞기) (0) | 2019.11.22 |