키오스크 lv4~5 완료, 도전 lv1 거의 다 해가는 중, 코드 리뷰
package com.example.kiosk;
import java.util.ArrayList;
import java.util.InputMismatchException;
import java.util.List;
import java.util.Scanner;
public class Kiosk {
private Menu menu = new Menu();
private final List<Menu> listMenus = new ArrayList<>();
private final Scanner sc = new Scanner(System.in);
private boolean flag = true;
public void start() {
listMenus.add(new Menu("Burgers"));
listMenus.add(new Menu("Drinks"));
listMenus.add(new Menu("Desserts"));
while (flag) {
System.out.println();
System.out.println("[ MAIN MENU" + " ]");
for (int i = 0; i< listMenus.size(); i++) {
System.out.println(i+1+"." + " " +listMenus.get(i).getCategory());
}
System.out.println("0. 종료 | 종료");
System.out.println();
System.out.print("메뉴를 선택해주세요 : ");
int chooseParentMenu;
try {
chooseParentMenu = sc.nextInt();
} catch (InputMismatchException e) {
System.out.println("올바르지 않은 입력입니다");
sc.nextLine();
continue;
}
if (chooseParentMenu ==0 ) {
System.out.println("프로그램을 종료합니다");
flag = false;
}else if (chooseParentMenu > 0 && chooseParentMenu < 4) {
menu = listMenus.get(chooseParentMenu-1);
System.out.println("선택한 메인메뉴 : " + chooseParentMenu + ". "+ menu.getCategory());
}else {
System.out.println("메뉴에 있는 숫자만 써주세요");
continue;
}
if (chooseParentMenu==0) {
break;
}
while (true) {
System.out.println();
System.out.println("[ " + menu.getCategory() + "MENU" + " ]");
menu.showMenuCategory();
System.out.println("0. 되돌아가기 | 되돌아가기");
System.out.println();
System.out.print("메뉴를 선택해주세요 : ");
int chooseChildMenu;
try {
chooseChildMenu = sc.nextInt();
}catch (InputMismatchException e) {
System.out.println("올바르지 않은 입력입니다");
sc.nextLine();
continue;
}
if (chooseChildMenu == 0) {
System.out.println("되돌아갑니다");
} else if (chooseChildMenu > 0 && chooseChildMenu < 5) {
System.out.println("선택한 " + menu.getCategory() + "메뉴 : " + chooseChildMenu + ". " + menu.getMenuItems().get(chooseChildMenu - 1).getName() + " | W " + menu.getMenuItems().get(chooseChildMenu - 1).getPrice() + " | " + menu.getMenuItems().get(chooseChildMenu - 1).getExplanation());
} else {
System.out.println("메뉴에 있는 숫자만 써주세요");
continue;
}
break;
}
}
}
}
package com.example.kiosk;
import java.util.ArrayList;
import java.util.List;
public class Menu {
private String category;
private final List<MenuItem> menuItems = new ArrayList<>();
public Menu() {
}
public Menu(String category) {
this.category=category;
switch (this.category) {
case "Burgers" -> {
menuItems.add(new MenuItem("ShackBurger ",6.9, "토마토, 양상추, 쉑소스가 토핑된 치즈버거"));
menuItems.add(new MenuItem("SmokeShack ",8.9, " 베이컨, 체리 페퍼에 쉑소스가 토핑된 치즈버거"));
menuItems.add(new MenuItem("Cheeseburger",6.9, "포테이토 번과 비프패티, 치즈가 토핑된 치즈버거"));
menuItems.add(new MenuItem("Hamburger ",5.4, "비프패티를 기반으로 야채가 들어간 기본버거"));
}
case "Drinks" -> {
menuItems.add(new MenuItem("Water ",1.0, "리얼 제로 칼로리 청정수"));
menuItems.add(new MenuItem("Coke & zero Coke",2.0, "펩시 주문 안 받아요"));
menuItems.add(new MenuItem("MilkShake ",2.5, "신선한 우유가 들어간 부드러운 밀크셰이크"));
menuItems.add(new MenuItem("Sprite ",2.0, "목이 너무 따갑지만 청량감 원탑"));
}
case "Desserts" -> {
menuItems.add(new MenuItem("CheeseCake ",4.0, "내가 좋아해서 파는 메뉴"));
menuItems.add(new MenuItem("CheeseStick ",2.0, "치즈 2m 늘어남"));
menuItems.add(new MenuItem("Ice Cream ",2.0, "달달하이 쳐 쥑이네"));
menuItems.add(new MenuItem("Chicken Nuggets",2.0, "단백질 부족하신 분 더 사드세요"));
}
default -> System.out.println("카테고리에 있는 것만 선택해주세요");
}
}
public void showMenuCategory() {
int i = menuItems.size()-1;
for (MenuItem menuItem : menuItems) {
System.out.println(menuItems.size()-i +". " + menuItem.getName() + " | W " + menuItem.getPrice() + " | " + menuItem.getExplanation());
i--;
}
}
public List<MenuItem> getMenuItems() {
return this.menuItems;
}
public String getCategory() {
return this.category;
}
}
package com.example.kiosk;
public class MenuItem {
private final String name;
private final double price;
private final String explanation;
MenuItem(String name, double price, String explanation) {
this.name = name;
this.price = price;
this.explanation = explanation;
}
public String getName() {
return name;
}
public double getPrice() {
return price;
}
public String getExplanation() {
return explanation;
}
}
main은 전과 같아서 따로 올리지 않았습니다. 그러고 보니 주석 처리를 너무 안 해서 코드 보기 어려웠을 수도 있겠다는 생각이 갑자기 들어서 주석 처리를 습관을 들이는 게 좋을 것 같다. 확실히 조금씩 빨라지는 느낌이 들고 익숙해지고 있다는 느낌이 든다.
점 점 재밌어지는 것 같다. 약간 어려운 수학 문제나 헬스 같은.. 어려운 부분을 해치우고 난 뒤 오는 쾌감? 그럼 느낌. 아직 어려운 부분인 enum은 시작도 안 했지만 빨리 한 덕에 enum 부분에 시간을 많이 쏟을 수 있어서 조금 여유롭다. 빨리 다 하고 시간 남으면 복습도 좀 해야 겠다.