code
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | import java.util.Scanner; import java.util.ArrayList; public class StudentDemo { public static void main(String args[]) { StudentDemo program = new StudentDemo(); program.doit(); } void doit() { ArrayList<Student> member = new ArrayList<Student>(); while (true) { member.add(new Student()); member.get(member.size()-1).setInfo(); if (member.get(member.size()-1).name.equals("end")) break; } int max = member.size(); for (int i=0; i<max-1; i++) member.get(i).process(); for (int i=0; i<max-1; i++) member.get(i).printResult(); member.get(0).printRanker(); } } class Student{ String name; int grade, min=100, max=0; double average; static String bestName; static double bestAverage; static ArrayList<String> greatArray = new ArrayList<String>(); ArrayList<Integer> scoreArray = new ArrayList<Integer>(); void setInfo() { Scanner sc = new Scanner(System.in); name = sc.next(); if (name.equals("end")) return; grade = sc.nextInt(); do scoreArray.add(sc.nextInt()); while (scoreArray.get(scoreArray.size()-1)!=0); scoreArray.remove(scoreArray.size()-1); } void process(){ for (int i=0; i<scoreArray.size(); i++){ if (min > scoreArray.get(i)){ min = scoreArray.get(i); } if(max < scoreArray.get(i)){ max = scoreArray.get(i); } average += scoreArray.get(i); } average = (average-min-max)/(scoreArray.size()-2); if (bestAverage < average){ bestName=name; bestAverage = average; } if (min >= 10 && max >= 45) greatArray.add(name); } void printResult(){ System.out.printf("%s(%d학년) [%.2f] ",name,grade,average); for (int i=0; i<scoreArray.size(); i++) System.out.printf("%d ",scoreArray.get(i)); System.out.printf("(%d %d 제외 %d개)\n",min,max,scoreArray.size()-2); } void printRanker(){ System.out.printf("1등 : %s\n우수선수 %d명 - ",bestName,greatArray.size()); for (int i=0; i<greatArray.size(); i++) System.out.printf("%s ",greatArray.get(i)); } } | cs |
부족한 점
- Student 클래스는 학생의 입장이기 때문에 1등 선별과 같은 기능이 있는것이 아쉽다. 이러한 기능은 main에서 지원해주어야 하기 때문에 학생 평균 점수를 반환해주는 기능만 구현했으면 좋을 것 같다.
- 배열 요소를 for문으로 접근할 때, i=0 ~ i<max 와 같은 형식이 아닌 int i : max 형식을 이용하여 구현했으면 더욱 바람직 했을 것 같다.
- 기본자료형의 경우 ArrayList 사용으로 속도적 측면에서 저하(래핑과 언래핑, 힙 객체에 접근하고 순차적이지 않기 때문에 os를 귀찮게함)될 가능성이 있다. 이러한 기본자료형의 ArrayList는 상황에 맞게 사용하는것이 좋다.
'Programing > Java' 카테고리의 다른 글
Java :: 근접한 정수 구하기(시그마, 팩토리얼, 제곱) (0) | 2018.09.17 |
---|---|
Java :: 음료 주문 처리 프로그램 (0) | 2018.09.12 |
Java :: 가위바위보프로그램 (1) | 2018.03.26 |
Java :: 숫자맞추기프로그램 (0) | 2018.03.26 |
Java :: 별피라미드만들기 (0) | 2018.03.26 |