Problem Solving

[Java] Requirements Q097: Refrigerator Class Design

Isaac S. Lee 2023. 8. 8. 09:49

📌Q097 Class

package com.test.question.q97;

public class Q097 {

	public static void main(String[] args) {
		/*
		● 요구사항
		Refrigerator 클래스와 Item 클래스를 설계하시오.
		
		● 조건
		- Refrigerator 객체의 정보
			Item을 최대 100개까지 담을 수 있다.(멤버 변수 = Item 배열)
		- Refrigerator 객체의 사용
			Item을 냉장고에 넣는다. void add(Item item);
			Item을 냉장고에서 꺼낸다. Item get(String name);
			냉장고에 있는 Item의 개수를 확인한다. int count();
			냉장고에 있는 Item을 확인한다. void listItem();
		- Item 객체의 정보
			식품명, 유통기한
		
		● 호출
		Refrigerator r = new Refrigerator();

		Item item1 = new Item();
		item1.setName("김치");
		item1.setExpiration("2023-08-16");
		r.add(item1);//냉장고에 넣기
		
		Item item2 = new Item();
		item2.setName("깍두기");
		item2.setExpiration("2023-08-09");
		r.add(item2);//냉장고에 넣기
		
		Item item3 = new Item();
		item3.setName("멸치볶음");
		item3.setExpiration("2023-08-11");
		r.add(item3);//냉장고에 넣기
		
		Item item4 = r.get("깍두기");//냉장고에서 꺼내기
		System.out.printf("%s의 유통기한 : %s\n", item4.getName(), item4.getExpiration());
		
		System.out.printf("냉장고 안의 총 아이템 개수 : %d개\n", r.count());
		
		r.listItem();
		
		● 출력
		'김치'를 냉장고에 넣었습니다. //r.add(item1);
		'깍두기'를 냉장고에 넣었습니다. //r.add(item2);
		'멸치볶음'를 냉장고에 넣었습니다. //r.add(item3);
		
		깍두기의 유통기한 : 2023-08-09 //printf();
		냉장고 안의 총 아이템 개수 : 2개 //printf();
		
		[냉장고 아이템 목록] //r.listItem();
		김치(2023-08-16) 
		멸치볶음(2023-08-11)
		*/
		
		Refrigerator r = new Refrigerator();

		Item item1 = new Item();
		item1.setName("김치");
		item1.setExpiration("2023-08-16");
		r.add(item1);//냉장고에 넣기
		
		Item item2 = new Item();
		item2.setName("깍두기");
		item2.setExpiration("2023-08-09");
		r.add(item2);//냉장고에 넣기
		
		Item item3 = new Item();
		item3.setName("멸치볶음");
		item3.setExpiration("2023-08-11");
		r.add(item3);//냉장고에 넣기
		
		Item item4 = r.get("깍두기");//냉장고에서 꺼내기
		System.out.printf("%s의 유통기한 : %s\n", item4.getName(), item4.getExpiration());
		
		System.out.printf("냉장고 안의 총 아이템 개수 : %d개\n", r.count());
		
		r.listItem();
	}
}

 

📌Item Class

package com.test.question.q97;

class Item {
	private String name; // 식품명
	private String expiration; // 유통기한

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getExpiration() {
		return expiration;
	}

	public void setExpiration(String expiration) {
		this.expiration = expiration;
	}
}

 

📌Refrigerator Class

package com.test.question.q97;

import java.util.Calendar;

class Refrigerator {
	private Item[] items = new Item[100];
	private int index = 0;

	// 냉장고에 아이템 추가
	public void add(Item item) {

		// 현재 아이템 개수가 배열 최대 크기보다 작은 경우에만 추가
		if (this.index < this.items.length) {
			this.items[index] = item;
			System.out.printf("'%s'를 냉장고에 넣었습니다.\n", this.items[index].getName());

			this.index++;
		} else {
			System.out.println("냉장고가 터질 지경입니다.");
		}
	}

	// 냉장고에서 아이템을 꺼냄
	public Item get(String name) {
		System.out.println();

		int targetIndex = -1;

		// 냉장고에 있는 아이템들을 순회하면서 찾고자 하는 아이템을 이름으로 비교하여 인덱스를 찾음
		for (int i = 0; i < index; i++) {
			if (items[i].getName().equals(name)) {
				targetIndex = i;
				break;
			}
		}

		// 찾은 아이템이 존재하는 경우
		if (targetIndex != -1) {
			// 해당 인덱스에 있는 아이템을 임시 변수에 저장
			Item tempItem = items[targetIndex];

			// 꺼낸 아이템을 배열에서 왼쪽으로 Shift하여 빈 자리를 메꿈
			for (int i = targetIndex; i < items.length - 1; i++) {
				items[i] = items[i + 1];
			}

			// 맨 마지막 인덱스를 null로 초기화하여 빈 자리를 처리
			items[items.length - 1] = null;
			index--;

			return tempItem;
		} else {
			return null;
		}
	}

	// 냉장고에 있는 아이템 개수를 확인
	public int count() {
		return this.index;
	}

	// 냉장고에 있는 아이템 목록 출력
	public void listItem() {
		System.out.println();
		System.out.println("[냉장고 아이템 목록]");

		// 냉장고에 있는 모든 아이템들을 순회하면서 이름과 유통기한을 출력
		for (int i = 0; i < this.index; i++) {
			System.out.printf("%s(%s)\n", this.items[i].getName(), this.items[i].getExpiration());
		}
	}
}