1. 문제
/******************************************************************************
* 문제 4-1
******************************************************************************/
// 새로운 프로젝트를 만든 후 새로운 클래스 Main를 만들어 Main.java 소스파일을 만들어라.
// 그런 후 아래 main 메소드를 복사해 소스파일에 넣어라.
// 클래스 정의, 생성자, 접근자, 객체배열 및 정적클래스와 관련된 문제이다.
// 아래 프로그램은 Student, Manager, Main으로 구성된다.
//
// 프로그램의 실행결과를 먼저 확인하라.
// 먼저 0 ~ 5 사이의 서로 다른 6개의 숫자를 임의의 순서로 연속적으로 입력 받는다.
// 이는 Manager에 추가할 학생들의 인덱스 순서이다.
// 그런 후 5명의 학생 객체를 생성하여 Manager에 추가한다.
// Manager는 5명의 학생 객체를 객체 배열에 저장하여 관리한다.
//
// Student, Manager 클래스의 멤버는 필요에 따라 추가해야 한다.
//
// 메뉴의 각 항목의 기능은 다음과 같으며, 이 순서로 구현하라.
// 1.DisplayAll: Manager가 관리하는 모든 학생 정보를 출력해야 한다.
// Student의 printStudent()를 활용하라. 오타를 줄이기 위해 아래 문장도 사용하라.
//System.out.printf("name\ttall\tdifference\n");
//
// 2.CalculateMean: Manager가 관리하는 모든 학생들의 키의 평균 값을 구해서 출력하고
// 이때 오타를 줄이기 위해 아래 문장을 사용하라.
//System.out.printf("tall mean: %.2f\n\n", mean);
// 각 학생의 키와 평균과의 차이 값을 각 학생 객체의 diff 멤버에 저장하라. (키가 평균보다 작으면 음수 값이 된다.)
// 그리고 학생 전체를 다시 디스플레이하라.
//
// 3.FindStudent: Manager가 관리하는 학생 중에 입력된 이름과 동일한 이름을 가진 학생을 찾아 출력한다.
// 찾지 못한 경우 아래의 에러 메시지를 출력한다.
//System.out.println(name+": not found.");
//
//=============================================================================
2. 전체코드
class Student {
// 아래 name, tall, diff는 반드시 private로 하라.
private String name;
private int tall;
private double diff;
public Student(String name, int tall){
this.name = name;
this.tall = tall;
}
public void printStudent() {
System.out.printf("%s\t%d\t%6.2f\n", name, tall, diff);
}
// 필요한 경우 멤버 값을 설정하고 구해오는 메소드(함수)를 만들어 멤버에 접근하라.
public int getTall(){
return this.tall;
}
public void setDiff(double diff){
this.diff = diff;
}
public String getName(){
return this.name;
}
}
// 필요한 메소드(함수)를 구현하라.
class Manager {
private int curIndex;
private Student[] students;
public Manager(int length){
this.curIndex = 0;
students = new Student[length];
}
public void displayAll(){
System.out.printf("name\ttall\tdifference\n");
for(int i=0; i<students.length; i++){
this.students[i].printStudent();
}
}
public void calculateMean(){
double total = 0;
for(int i=0; i<students.length; i++){ //total 구하기
total += this.students[i].getTall();
}
total /= this.students.length;
for(int i=0; i<students.length; i++){ //diff 구하기
this.students[i].setDiff(this.students[i].getTall() - total);
}
System.out.printf("tall mean:%.2f\n\n",total);
this.displayAll();
}
public void append(Student s){
students[curIndex++] = s;
}
public void findStudent(String name){
boolean findFlag = true;
for(int i=0; i<students.length; i++){
if(students[i].getName().equals(name)){
findFlag = false;
students[i].printStudent();
}
}
if(findFlag){
System.out.println(name+": not found.");
}
}
}
public class Main {
public static void main(String[] args)
{
Scanner in = new Scanner(System.in);
String[] name = {"bob", "john", "alice", "nana", "tom", "sandy"};
int[] tall = {172, 183, 168, 161, 171, 172};
// Manager 클래스의 객체변수 manager 선언 및 객체 생성
// name.length는 manager내에 생성될 학생배열의 길이임
Manager manager = new Manager(name.length);
System.out.print("input continuously 6 indices(index) of array: ");
// 0 ~ 5 사이의 서로 다른 6개의 숫자(임의의 순서)들을 연속적으로 입력 받으면서
// 학생 객체를 생성한 후 manager에 등록한다.
for(int i = 0; i < name.length; i++) {
int j = in.nextInt();
// manager 객체의 append 메소드를 실행하여 학생 객체 등록
// append()는 manager내의 학생 객체 배열에 순서적으로 삽입한다.
manager.append(new Student(name[j], tall[j]));
}
while(true) {
System.out.print("\n0.Exit 1.DisplayAll 2.CalculateMean 3.FindStudent >> ");
int input = in.nextInt();
if (input == 0)
break;
switch (input) {
case 1: manager.displayAll();
break;
case 2: manager.calculateMean();
break;
case 3: System.out.print("name? ");
String pname = in.next();
manager.findStudent(pname);
break;
}
}
in.close();
}
}
객체 배열을 사용하는것이 포인트!
'코딩이야기 > 연습문제' 카테고리의 다른 글
[라이브코딩 연습] JAVA 실습문제 4-2 (0) | 2022.11.01 |
---|---|
JAVA 실습문제 3-2 (0) | 2022.10.28 |
JAVA 실습문제 3-1 (0) | 2022.10.28 |
JAVA 실습문제 3-3 (0) | 2022.10.25 |