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()));
}
}
댓글 입력