Do it! 자료구조와 함께 배우는 알고리즘 입문[자바편] 연습문제와 실습문제입니다.


클래스 배열이란 클래스로 부터 만들어진 객체로 이루어진 배열을 뜻한다.

클래스 자체가 자료형이되어서 데이터를 더 쉽게 다룰 수 있다.

아래는 이름, 키, 시력을 저장하는 클래스의 객체로 이루어진 배열을 활용하여

평균 키와 시력 분포를 출력하는 예제 코드이다.

public class Main{
	static class PhyscData { //이름, 키, 시력을 저장하는 클래스
		String name;
		int    height;
		double vision;

		PhyscData(String name, int height, double vision) { //생성자
			this.name 	= name;
			this.height = height;
			this.vision = vision;
		}
	}

	static double aveHeight(PhyscData[] arr) { //평균 키를 리턴하는 메소드
		double sum = 0;

		for (int i = 0; i < arr.length; i++)
			sum += arr[i].height;

		return sum / arr.length;
	}

	static void distVision(PhyscData[] arr) { //시력 분포를 출력하는 메소드
		int[] distribution = new int[5];
		for (int i = 0; i < arr.length; i++)
		{
			if(0.0 <= arr[i].vision && arr[i].vision < 0.5) ++distribution[0];
			else if(arr[i].vision < 1.0) ++distribution[1];
			else if(arr[i].vision < 1.5) ++distribution[2];
			else if(arr[i].vision < 2.0) ++distribution[3];
			else if(2.0 <= arr[i].vision) ++distribution[4];
		}
		
			System.out.println("0.5 미만 " + distribution[0] + "명");
			System.out.println("1.0 미만 " + distribution[1] + "명");
			System.out.println("1.5 미만 " + distribution[2] + "명");
			System.out.println("2.0 미만 " + distribution[3] + "명");
			System.out.println("2.0 이상 " + distribution[4] + "명");
	}
	
	public static void main(String[] args) {
			PhyscData[] arr = { //PhyscData타입 객체를 저장하는 배열
			new PhyscData("박현규", 162, 0.3),
			new PhyscData("함진아", 173, 0.7),
			new PhyscData("최윤미", 175, 2.0),
			new PhyscData("홍연의", 171, 1.5),
			new PhyscData("이수진", 168, 0.4),
			new PhyscData("김영준", 174, 1.2),
			new PhyscData("박용규", 169, 0.8),
		};
		System.out.println("이름\t키\t시력");
		for(int i = 0; i < arr.length; ++i) System.out.println(arr[i].name + "\t" + arr[i].height + "\t" + arr[i].vision);
		System.out.printf("평균 키 : %.2fCM\n", aveHeight(arr));

		distVision(arr);

	}
}
/*
이름	키	시력
박현규	162	0.3
함진아	173	0.7
최윤미	175	2.0
홍연의	171	1.5
이수진	168	0.4
김영준	174	1.2
박용규	169	0.8
평균 키 : 170.29CM
0.5 미만 2명
1.0 미만 2명
1.5 미만 1명
2.0 미만 1명
2.0 이상 1명
*/

시력 분포를 위 사진처럼 기호 문자 *를 사람 수만큼 반복하여 출력

static void distVision(PhyscData[] arr) { //시력 분포를 출력하는 메소드
    int[] distribution = new int[5];
    for (int i = 0; i < arr.length; i++)
    {
        if(0.0 <= arr[i].vision && arr[i].vision < 0.5) ++distribution[0];
        else if(arr[i].vision < 1.0) ++distribution[1];
        else if(arr[i].vision < 1.5) ++distribution[2];
        else if(arr[i].vision < 2.0) ++distribution[3];
        else if(2.0 <= arr[i].vision) ++distribution[4];
    }

    for(int i = 0; i < distribution.length; ++i)
    {
        if(i == 0) System.out.print("0.5 미만 : ");
        else if(i == 1) System.out.print("1.0 미만 : ");
        else if(i == 2) System.out.print("1.5 미만 : ");
        else if(i == 3) System.out.print("2.0 미만 : ");
        else if(i == 4) System.out.print("2.0 이상 : ");
        for(int j = 0; j < distribution[i]; ++j)
        {
            System.out.print("*");
        }
        System.out.println();
    }
}