배달음식 전문점 운영을 위해 다음과 같이 DeliveryStore 인터페이스와 PizzaStore, Food 클래스를 작성했습니다.
-
DeliveryStore :
- DeliveryStore는 배달 음식점의 인터페이스입니다.
- 배달 음식점은 setOrderList와 getTotalPrice 메소드를 구현해야 합니다.
- setOrderList 메소드는 주문 메뉴의 리스트를 매개변수로 받아 저장합니다.
- getTotalPrice 메소드는 주문받은 음식 가격의 총합을 return 합니다.
-
Food :
- Food는 음식을 나타내는 클래스입니다.
- 음식은 이름(name)과 가격(price)으로 구성되어있습니다.
-
PizzaStore
- PizzaStore는 피자 배달 전문점을 나타내는 클래스이며 DeliveryStore 인터페이스를 구현합니다.
- menuList는 피자 배달 전문점에서 주문 할 수 있는 음식의 리스트를 저장합니다.
- orderList는 주문 받은 음식들의 이름을 저장합니다.
- setOrderList 메소드는 주문 메뉴를 받아 orderList에 저장합니다.
- getTotalPrice 메소드는 orderList에 들어있는 음식 가격의 총합을 return 합니다.
주문 메뉴가 들어있는 배열 orderList가 매개변수로 주어질 때, 주문한 메뉴의 전체 가격을 return 하도록 solution 메소드를 작성하려고 합니다. 위의 클래스 구조를 참고하여 주어진 코드의 빈칸을 적절히 채워 전체 코드를 완성해주세요.
매개변수 설명
주문 메뉴가 들어있는 배열 orderList가 solution 메소드의 매개변수로 주어집니다.
- orderList의 길이는 1 이상 5이하입니댜.
- orderList에는 주문하려는 메뉴의 이름들이 문자열 형태로 들어있습니다.
- orderList에는 같은 메뉴의 이름이 중복해서 들어있지 않습니다.
- 메뉴의 이름과 가격은 PizzaStore의 생성자에서 초기화해줍니다.
return 값 설명
주문한 메뉴의 전체 가격을 return 해주세요.
예시
orderList | return |
---|---|
["Cheese", "Pineapple", "Meatball"] | 51600 |
import java.util.*;
class Main {
interface DeliveryStore{
public void setOrderList(String[] orderList);
public int getTotalPrice();
}
class Food{
public String name;
public int price;
public Food(String name, int price){
this.name = name;
this.price = price;
}
}
class PizzaStore implements DeliveryStore {
private ArrayList<Food> menuList;
private ArrayList<String> orderList;
public PizzaStore(){
//init menuList
menuList = new ArrayList<Food>();
String[] menuNames = {"Cheese", "Potato", "Shrimp", "Pineapple", "Meatball"};
int[] menuPrices = {11100, 12600, 13300, 21000, 19500};
for(int i = 0; i < 5; i++)
menuList.add(new Food(menuNames[i], menuPrices[i]));
//init orderList
orderList = new ArrayList<String>();
}
public void setOrderList(String[] orderList){
for(int i = 0; i < orderList.length; i++)
this.orderList.add(orderList[i]);
}
public int getTotalPrice(){
int totalPrice = 0;
Iterator<String> iter = orderList.iterator();
while (iter.hasNext()) {
String order = iter.next();
for(int i = 0; i < menuList.size(); i++)
if(order.equals(menuList.get(i).name))
totalPrice += menuList.get(i).price;
}
return totalPrice;
}
}
public int solution(String[] orderList) {
DeliveryStore deliveryStore = new PizzaStore();
deliveryStore.setOrderList(orderList);
int totalPrice = deliveryStore.getTotalPrice();
return totalPrice;
}
🍋 Iterator
자바의 컬렉션 프레임워크는 컬렉션에 저장된 요소를 읽어오는 방법을 Iterator 인터페이스로 표준화함
Collection 인터페이스에서는 Iterator 인터페이스를 구현한 클래스의 인스턴스를 반환하는 iterator() 메소드를 정의하여 각 요소에 접근하도록 하고 있음
따라서 Collection 인터페이스를 상속받는 List와 Set 인터페이스에서도 iterator() 메소드를 사용할 수 있음
👉 선언 방법
Iterator<자료형>변수명 = 컬랙션명.iterator();
ex) Iterator<Integer> itr = arrayNum.iterator();
LinkedList<Integer> lnkList = new LinkedList<Integer>();
lnkList.add(4);
lnkList.add(2);
lnkList.add(3);
lnkList.add(1);
Iterator<Integer> iter = lnkList.iterator();
while (iter.hasNext()) {
System.out.print(iter.next() + " ");
}
✔ 실행 결과
4 2 3 1
👉 사용 목적
-컬랙션 내에 값이 있는지 없는지 판단
-컬랙션에 값이 존재하면 꺼내오기 또는 제거
👉 사용 방법
선언시 iterater의 변수에 컬랙션 요소들이 다 복사
Iterator 안에는 hasNext(); next(); remove(); 함수 있음
hasNext() : 컬랙션 내에 다음 인자가 있는지 확인하는 것. 있으면 true 없으면 false를 반환
보통 while(itr.hasNext()) 를 사용하여 컬랙션 값을 쭉 돌기 위해 사용
next() : 다음 인자가 있는지 없는지 판단. 있으면 그 인자를 반환. 없으면 NULL반환
hasNext()와 같지만 반환을 값으로 한다. 특히 이것은 remove()와 함께 사용함에서 큰 차이점이 있음
remove(): next() 로 반환한 인자를 삭제
💡 참고
www.tcpschool.com/java/java_collectionFramework_iterator
코딩교육 티씨피스쿨
4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등
tcpschool.com
'자격증 > COS PRO' 카테고리의 다른 글
12.02(자주 나오는 코드 정리) (0) | 2020.12.02 |
---|