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"; }
}
// 적어도 주어진 로직대로 코드를 구현할 수 있는 능력은 갖추어야 한다.
 
댓글 없음:
댓글 쓰기