부모
package quiz12;
public class Product {
//상품의 부모클래스 - 수정x
private int price;
private String name;
public Product(int price, String name) {
this.price = price;
this.name = name;
}
public int getPrice() {
return price;
}
public void setPrice(int price) {
this.price = price;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
자식
package quiz12;
public class Tv extends Product {
//가격 400원 이름은 tv
//get, set메서드는 자동으로 상속됩니다
public Tv() {
super(400,"tv");
}
}
super(int,String)을 통해 부모클래스의 생성자를 받아옴
package quiz12;
public class Radio extends Product {
//Radio의 생성자는 기본생성자로 만들고, super를 통해서 가격 500원, 이름은 radio로 저장
//get, set메서드는 자동으로 상속됩니다
public Radio() {
super(500,"radio");
}
}
package quiz12;
public class Computer extends Product {
//가격 600원 이름은 com
//get, set메서드는 자동으로 상속됩니다
public Computer() {
super(600, "com");
}
}
사용자클래스
package quiz12;
public class MyCart {
/*
철수는 TV객체, Radio객체, Computer객체를 전달받아서 계산하는 Cart클래스를 만드려고한다.
Product클래스는 부모클래스 이다.
Tv, Radio, Computer는 자식클래스 이다.
Product클래스에는 필요한 변수가 선언되어 있고 getter, setter가 생성되어 있다.
*/
private int money;
private Product[] cart = new Product[1]; //상품을 저장할 배열
private int i = 0;
//2. MyCart의 생성자는 money만 받아서 초기화
public MyCart(int money) {
this.money=money;
}
/*
* 3. buy(모든 상품을 받도록 선언)
* ************객체의 getter메서드의 활용*************
* 가진돈과 전달된 물건객체의 가격을 비교해서 돈이 적으면 "금액부족" 출력후에 종료하세요.
* 가진돈이 충분하면 물건의 가격을 money에서 차감하고 add(상품) 메서드를 호출합니다.
*/
public void buy(Product product) {
if(money<product.getPrice()) {
System.out.println("금액부족");
return;
}else {
money-=product.getPrice();
this.add(product);
}
}
/*
* 4. add(모든 상품을 받도록 선언)
* *************배열의 복사**************
* 만약 i의 값이 장바구니의 크기보다 같거나 크다면
* 기존의 장바구니보다 크기가 * 2큰 배열을 생성.
* 기존의 장바구니 값을 새로운 배열에 복사.
* 새로운 장바구니를 기존의 장바구니와 바꾼다.
*
* 상품(매개변수)을 장바구니(배열)에 담는다.
*
* info()메서드 호출
*/
private void add(Product product) {
if(i>=cart.length) {
Product[] cart2 = new Product[cart.length*2];
for(int j=0;j<cart.length;j++) {
cart2[j]=cart[j];
}
this.cart=cart2;
}
cart[i]=product;
i++;
info();
}
/*
* 5.info()
* - 장바구니 안에 담긴 물건의 목록(name)을 출력한다.
* - 남은금액 출력
* 출력예시: TV TV Computer Radio ......
* 남은금액: 500
* 메인에서 buy메서드 실행
*
*/
public void info() {
for(int k=0;k<cart.length;k++) {
if(cart[k]==null) break;
System.out.print(cart[k].getName());
System.out.print(" ");
}
System.out.println();
System.out.println("남은금액:"+money);
}
}
연결되고 연결되고 연결되는 문제. 어디에 뭘 넣으며 어떤 매개변수를 받냐 아니냐를 잘 구분하면 쉬워진다.
add메서드에서, 우선! 일단! 장바구니를 만들고 바꾼다. 그 뒤에 장바구니에 물건을 넣는 것!
(멤버변수 배열의 크기가 다른데도 바뀔 수 있다는 것을 이해하지 못했는데, 쉽게 String으로 생각하면
2글자짜리를 10글자짜리로 바꾸는 것이 가능하니, 이것도 가능! 주소값이 바뀌는 것이다.)
if(cart[k]==null) break;를 거는 것도 수업에서 한 이유와 같다. 물건을 3개 넣으려 해도 장바구니는 2배씩 커지니 4개를 담는 장바구니가 생성될 것이고, 마지막 칸은 null일 수밖에 없다. 때문에 break를 걸어주는 것
main
package quiz12;
public class MainClass {
public static void main(String[] args) {
MyCart mycart = new MyCart(5000);
Radio radio = new Radio();
Tv tv = new Tv();
Computer com = new Computer();
mycart.buy(tv);
mycart.buy(radio);
mycart.buy(com);
mycart.buy(com);
mycart.buy(tv);
mycart.buy(com);
mycart.buy(com);
mycart.buy(radio);
mycart.buy(com);
mycart.buy(radio);
}
}
tv
남은금액:4600
tv radio
남은금액:4100
tv radio com
남은금액:3500
tv radio com com
남은금액:2900
tv radio com com tv
남은금액:2500
tv radio com com tv com
남은금액:1900
tv radio com com tv com com
남은금액:1300
tv radio com com tv com com radio
남은금액:800
tv radio com com tv com com radio com
남은금액:200
금액부족
메인에서 라디오, 티비, 컴퓨터 객체를 생성해 주고, 그다음에 매개변수로 집어넣기.
'JAVA' 카테고리의 다른 글
221013 instanceof (0) | 2022.10.13 |
---|---|
221012 프로그래머스 저주의 숫자 3 Integer.parseint, Integer.toString(), contain() (0) | 2022.10.12 |
221012 이종모음-배열 다형성과 매개변수의 다형성 (0) | 2022.10.12 |
221012 다형성 (0) | 2022.10.12 |
221012 클래스 받기 실습 (0) | 2022.10.12 |