class Exercise7_19 {
public static void main(String[] args) {
Buyer b = new Buyer();
b.buy(new Tv());
b.buy(new Computer());
b.buy(new Tv());
b.buy(new Audio());
b.buy(new Computer());
b.buy(new Computer());
b.buy(new Computer());
b.summary();
}
}
class Buyer {
int money = 1000;
Product[] cart = new Product[3];
int i = 0;
void buy(Product p) {
if(money < p.price) {
System.out.println("잔액이 부족하여 " + p + "을/를 살 수 없습니다.");
return;
// 가진 돈과 물건의 가격을 비교해서 가진 돈이 적으면 메서드를 종료한다.
}
if(money >= p.price) {
money -= p.price;
add(p);
}
}
void add(Product p) { //만약에 처음 만들어진 cart의 배열수를 초과할 경우,
// 그 두배의 배열을 새로 만든다음에 옮긴다.
if( i >= cart.length) {
Product[] cart2 = new Product[cart.length*2];
/*
for(int j=0; j<cart.length; j++) {
cart2[j] = cart[j];
} */
System.arraycopy(cart, 0, cart2, 0, cart.length);
// cart 배열의 0번째부터 cart의 길이만큼을
// cart2 배열의 0번째부터 복사한다.
cart = cart2; // cart2 주소를 cart 에게 넘겨준다.
}
else {
cart[i] = p; // cart[i++] = p; 두 줄을 이 한줄로 줄일수 있다.
i++;
}
}
void summary() {
String itemList = " ";
int sum=0;
for(int j=0; j < cart.length; j++) {
if(cart[j]==null)
break;
itemList += cart[j] + ", ";
sum += cart[j].price;
}
System.out.println("구입한 물건 : " + itemList);
System.out.println("사용한 금액 : " + sum);
System.out.println("남은 금액 : "+ money);
}
}
class Product {
int price;
Product(int price) {
this.price = price;
}
}
class Tv extends Product {
Tv() { super(100); }
public String toString(){return "Tv"; }
}
class Computer extends Product {
Computer() { super(200); }
public String toString() { return "Computer"; }
}
class Audio extends Product {
Audio() { super(50); }
public String toString() { return "Audio"; }
}
// 적어도 주어진 로직대로 코드를 구현할 수 있는 능력은 갖추어야 한다.
댓글 없음:
댓글 쓰기