JAVA 37多機能性のメリット2


2.配列を使用した複数のオブジェクトの処理

  • 祖先タイプの配列には、子孫のオブジェクトを含めることができます.
  • 親タイプ配列に複数のサブタイプを格納するオブジェクト
  • はもともと1つのタイプしか保存できませんでした...
  • Product[] p = new Product[3];	//Product p[]도 된다!
    p[0] = new Tv();
    p[1] = new Computer();
    p[2] = new Audio();

    ハハハハ
    class Product2 {
    	int price;
    	int bonusPoint;
    	
    	Product2(int price) {
    		this.price = price;
    		bonusPoint = (int)(price/10.0);
    	}
    }
    
    class Tv22 extends Product2 {
    	Tv22() {
    		super(800);
    	}
    	public String toString() {
    		return "Tv";
    	}
    }
    
    class Computer2 extends Product2 {
    	Computer2() {
    		super(300);
    	}
    	public String toString() {
    		return "Computer";
    	}
    }
    
    class Audio2 extends Product2 {
    	Audio2() {
    		super(100);
    	}
    	public String toString() {
    		return "Audio";
    	}
    }
    
    class Buyer2 {
    	int money = 1000;
    	int bonusPoint = 0;
    	
    	Product2[] cart = new Product2[10];	//여기에 cart를 만드네?
    	int i = 0;
    	
    	void buy(Product2 p) {
    		if (money < p.price) {
    			System.out.println("잔액이 부족하여 "+p+"을/를 구입할 수 없습니다.");
    			return;
    		}
    		money -= p.price;
    		bonusPoint += p.bonusPoint;
    		cart[i++] = p;	
    		//구입한 제품의 주소를 Product2타입의 참조변수 배열 cart[i]에 저장
    		System.out.println(p+"을/를 구입하셨습니다.");
    	}
    	
    	void summary() {	//구매한 물품의 전체 정보
    		int sum = 0;			//합계
    		String itemList = "";	//구매 물품 목록
    		
    		for(int i=0; i<cart.length; i++) {
    			if(cart[i]==null) break;
    			//이거 어렵다. 더이상 구매하지 않았으면 반복문 빠져나오기
    			sum += cart[i].price;
    			itemList += cart[i]+", ";
    			//cart[i].toString()
    		}
    		System.out.println("구입하신 물품의 총금액은 "+sum+"입니다.");
    		System.out.println("구입하신 물품은 "+itemList+"입니다.");
    	}
    }
    
    
    public class Ex7_09 {
    
    	public static void main(String[] args) {
    		Buyer2 b = new Buyer2();
    		b.buy(new Tv22());
    		b.buy(new Computer2());
    		b.buy(new Audio2());
    		
    		b.summary();
    		//이렇게 호출!! 
    		System.out.println("현재 잔액은 "+b.money+"입니다.");
    		System.out.println("현재 보너스점수는 "+b.bonusPoint+"입니다.");
    
    	}
    
    }
    Tv을/를 구입하셨습니다.
    잔액이 부족하여 Computer을/를 구입할 수 없습니다.
    Audio을/를 구입하셨습니다.
    구입하신 물품의 총금액은 900입니다.
    구입하신 물품은 Tv, Audio, 입니다.
    현재 잔액은 100입니다.
    현재 보너스점수는 90입니다.

    骨が折れる
    ->アップグレード!
    Ch07Re2
    Ex7_09
    class Product22{
    	int price;
    	int bonusPoint;
    	
    	public Product22(int price) {	//매개생성자
    		super();	//생성자 첫줄에 생성자 호출이 없으면 자동으로 추가
    		this.price = price;
    		bonusPoint = (int) (price / 10.0);
    	}
    }
    
    class Tv22 extends Product22{
    	public Tv22(int price) {	//매개생성자
    		super(price);	//생성자 첫줄에 생성자 호출
    	}
    	public String toString() { return "Tv";}
    }
    
    class Computer22 extends Product22{
    	public Computer22(int price) {	//매개생성자
    		super(price);	//생성자 첫줄에 생성자 호출
    	}
    	public String toString() { return "Computer";}
    }
    
    class Buyer22{
    	int money;
    	int bonusPoint;
    //	Product22[] cart = new Product22[10];;	//**장바구니, 포함관계
    	Product22[] cart;
    	
    	public Buyer22(int money) {
    		this.money = money;
    		bonusPoint = 0;
    		cart = new Product22[10];;
    		System.out.println("현재 소지금액은 "+money+"원입니다.");
    		System.out.println("현재 보너스점수는 "+bonusPoint+"점입니다.");
    	}
    	int i=0;
    	void buy(Product22 p) {
    		if(money<p.price) {
    			System.out.println("금액이 부족하여 "+p+"을/를 구입할 수 없습니다.");
    			return;	//***
    		}
    		money -= p.price;
    		bonusPoint += p.bonusPoint;
    		System.out.println(p+"을/를 구입하셨습니다.");
    		cart[i++] = p;	//*******
    	}
    	
    	void summary() {
    		int sum = 0;	//합계****
    		String itemList = "";	//구매목록****
    		System.out.print("구입하신 제품은 ");
    		if(cart[0] == null) {
    			System.out.println("없습니다.");
    		} else {
    			for(int i=0; i<=cart.length; i++) {
    				if(cart[i]==null) break;	//*****
    				sum += cart[i].price;
    				itemList += cart[i]+", ";	//****
    			}
                System.out.println(itemList+"입니다.");
    		}
    		System.out.println("총 지출은 "+sum+"원입니다.");
    		System.out.println("잔액은 "+money+"원입니다.");
    		System.out.println("보너스점수는 "+bonusPoint+"점입니다.");
    	}
    }
    
    public class Ex7_09 {
    
    	public static void main(String[] args) {
    		Buyer22 b = new Buyer22(1000);
    		b.buy(new Tv22(1200));
    		b.buy(new Computer22(400));
    		b.buy(new Tv22(500));
    		b.summary();
    
    	}
    
    }
    현재 소지금액은 1000원입니다.
    현재 보너스점수는 0점입니다.
    금액이 부족하여 Tv을/를 구입할 수 없습니다.
    Computer을/를 구입하셨습니다.
    Tv을/를 구입하셨습니다.
    구입하신 제품은 Computer, Tv, 입니다.
    총 지출은 900원입니다.
    잔액은 100원입니다.
    보너스점수는 90점입니다.
    生きていけない時.
    현재 소지금액은 1000원입니다.
    현재 보너스점수는 0점입니다.
    금액이 부족하여 Tv을/를 구입할 수 없습니다.
    구입하신 제품은 없습니다.
    총 지출은 0원입니다.
    잔액은 1000원입니다.
    보너스점수는 0점입니다.
    ->アップグレード!!ArrayList
    Ch07Re2
    Ex7_09_2
    import java.util.ArrayList;
    
    class Product33{
    	int price;
    	int bonusPoint;
    	
    	public Product33(int price) {	//매개생성자
    		super();	//생성자 첫줄에 생성자 호출이 없으면 자동으로 추가
    		this.price = price;
    		bonusPoint = (int) (price / 10.0);
    	}
    }
    
    class Tv33 extends Product33{
    	public Tv33(int price) {	//매개생성자
    		super(price);	//생성자 첫줄에 생성자 호출
    	}
    	public String toString() { return "Tv";}
    }
    
    class Computer33 extends Product33{
    	public Computer33(int price) {	//매개생성자
    		super(price);	//생성자 첫줄에 생성자 호출
    	}
    	public String toString() { return "Computer";}
    }
    
    class Buyer33{
    	int money;
    	int bonusPoint;
    //	Product22[] cart = new Product22[10];;	//**장바구니, 포함관계
    	ArrayList<Product33> list = new ArrayList<Product33>();
    //	Product33[] cart;
    	
    	public Buyer33(int money) {
    		this.money = money;
    		bonusPoint = 0;
    //		cart = new Product33[10];;
    		System.out.println("현재 소지금액은 "+money+"원입니다.");
    		System.out.println("현재 보너스점수는 "+bonusPoint+"점입니다.");
    	}
    	int i=0;
    	void buy(Product33 p) {
    		if(money<p.price) {
    			System.out.println("금액이 부족하여 "+p+"을/를 구입할 수 없습니다.");
    			return;	//***
    		}
    		money -= p.price;
    		bonusPoint += p.bonusPoint;
    		System.out.println(p+"을/를 구입하셨습니다.");
    		list.add(p);	//********
    	}
    	
    	void summary() {
    		int sum = 0;	//합계****
    		System.out.print("구입하신 제품은 ");
    		if(list.isEmpty()) {
    			System.out.println("없습니다.");
    		} else {
    			for(int i=0; i<list.size(); i++)
    				sum += list.get(i).price;
    			System.out.println(list+" 입니다.");
    		}
    		System.out.println("총 지출은 "+sum+"원입니다.");
    		System.out.println("잔액은 "+money+"원입니다.");
    		System.out.println("보너스점수는 "+bonusPoint+"점입니다.");
    	}
    }
    
    
    
    
    public class EX7_09_2 {
    
    	public static void main(String[] args) {
    		Buyer33 b = new Buyer33(1000);
    		b.buy(new Tv33(1200));
    		b.buy(new Computer33(400));
    		b.buy(new Tv33(500));
    		b.summary();
    
    	}
    
    }
    현재 소지금액은 1000원입니다.
    현재 보너스점수는 0점입니다.
    금액이 부족하여 Tv을/를 구입할 수 없습니다.
    Computer을/를 구입하셨습니다.
    Tv을/를 구입하셨습니다.
    구입하신 제품은 [Computer, Tv] 입니다.
    총 지출은 900원입니다.
    잔액은 100원입니다.
    보너스점수는 90점입니다.
    生きていけない時.
    현재 소지금액은 1000원입니다.
    현재 보너스점수는 0점입니다.
    금액이 부족하여 Tv을/를 구입할 수 없습니다.
    구입하신 제품은 없습니다.
    총 지출은 0원입니다.
    잔액은 1000원입니다.
    보너스점수는 0점입니다.

    Ref

  • 生活コードJAVA 1
  • オブジェクト化の説明
  • w3schools JAVA
  • 羅東彬
  • ジャワ隕石オブジェクト
  • ジャワ議政石羽バニラ
  • クラスとオブジェクト