자바, 인터페이스, 다형성, Casting 도와주세요...ㅠㅠ

조회수 46회

이미지

이미지

이미지

package w3;

public interface Measurable {
    double getMeasure();
}
package w3;

public class Rectangle implements Measurable {
    private double width;
    private double height;

    public Rectangle(double width, double height) {
        this.width = width;
        this.height = height;
    }

    // 사각형의 크기를 설정
    public void setDimension(double width, double height) {
        this.width = width;
        this.height = height;

    }

    @Override
    public double getMeasure() {
        return (width * height);
    }

    public String toString() {
        return String.format("Rectangle[width=%.1f, height=%.1f]", width, height);
    }


}
package w3;

//계좌
public class BankAccount implements Measurable{
    private double balance; // 인스턴스 필드!

    /**
     * 주어진 balance를 가지는 계좌를 개설
     */
    public BankAccount(double initialBalance) {
        balance = initialBalance;
    }

    /**
     * 계좌로 돈을 입금함
     */
    public void deposit(double amount) {
        balance += amount;
    }

    /**
     * 계좌로 부터 돈을 인출 함
     */
    public void withdraw(double amount) {
        balance -= amount;
    }

    /**
     * 현재 잔액을 리턴
     */
    public double getBalance() {
        return balance;
    }

    public String toString() {
        return String.format("BankAccount[balance = %.1f]", balance);
    }

    @Override
    public double getMeasure() {
        return balance;
    }
}
package w3;

/**
 * Computers the average of a set of data values.
 */
public class Dataset {
    private double sum; // 지금까지 측정한 값들의 합.
    private Measurable maximum; // 지금까지 측정한 것들 중 가장 큰 놈.
    private int count; // 지금까지 측정한 갯수.
    private Measurable minimum;

    public Dataset() {
        sum = 0;
        count = 0;
        maximum = null;
        minimum = null;
    }

    /**
     * 데이터 셋에 데이터 하나를 추가한다.
     * 
     * @param x 데이터 값.
     */
    public void add(Measurable x) {
        sum = sum + x.getMeasure();
        if (count == 0 || maximum.getMeasure() < x.getMeasure())
            maximum = x;
        if (count == 0 || minimum.getMeasure() > x.getMeasure())
            minimum = x;
        count++;
    }

    /**
     * Gets the average of the added data.
     * 
     * @return the average or 0 if no data has been added
     */
    public double getAverage() {
        if (count == 0)
            return 0;
        return sum / count;
    }

    /**
     * Gets the largest of the added data.
     * 
     * @return the maximum or 0 if no data has been added
     */
    public Measurable getMaximum() {
        return maximum;
    }

    public Measurable getMinimum() {
        return minimum;
    }
}
package w3;

import java.util.*;

public class DataSetTester {
    public static void main(String[] args) {
        DataSetTester dataSetTester = new DataSetTester();
        dataSetTester.test();
    }
    public void test() {
        Random random = new Random();

        Dataset dataSet = new Dataset();

        for (int i = 0; i < 100; i++) {
            double x = random.nextDouble() * 100;
            double y = random.nextDouble() * 100;
            Rectangle rectangle = new Rectangle(x, y);
            dataSet.add(rectangle);
        }
        Rectangle max = (Rectangle) dataSet.getMaximum();
        System.out.println("면적이 가장 큰 Rectangle: "+max.toString());
        System.out.println(String.format("면적이 가장 큰 Rectangle의 면적: %,.1f", max.getMeasure()));
        System.out.println(dataSet.getMaximum());
        System.out.println(String.format("면적의 평균: %,.1f", dataSet.getAverage()));
        System.out.println();

        dataSet= new Dataset();
        for (int i = 0; i < 100; i++) {
            double initBalance = random.nextDouble() * 10000;
            BankAccount bankAccount = new BankAccount(initBalance);
            dataSet.add(bankAccount);
        }

        System.out.println("가장 잔액이 많은 계좌: "+dataSet.getMaximum());

        System.out.println("가장 잔액이 적은 계좌: "+dataSet.getMinimum());
        System.out.println(String.format("잔액의 평균: %,.1f", dataSet.getAverage()));
    }

}
  • 질문이 뭔가요? 그리고 텍스트를 스크린샷으로 올리면 글씨가 작아서 읽을 수가 없습니다. 편집요청빌런 2020.2.10 14:43

답변을 하려면 로그인이 필요합니다.

Hashcode는 개발자들을 위한 무료 QnA 사이트입니다. 계정을 생성하셔야만 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)

ᕕ( ᐛ )ᕗ
로그인이 필요합니다

Hashcode는 개발자들을 위한 무료 QnA사이트 입니다. 계정을 생성하셔야만 글을 작성하실 수 있습니다.