2014년 1월 5일 일요일

[7-19]마트 물건구입

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"; }
}


// 적어도 주어진 로직대로 코드를 구현할 수 있는 능력은 갖추어야 한다.

댓글 없음:

댓글 쓰기