Scanner 활용법, 조건문, 반복문을 재확인하며 입력 데이터를 처리하는 방법 강화[ SHAKESHACK MENU ]
1. ShackBurger | W 6.9 | 토마토, 양상추, 쉑소스가 토핑된 치즈버거
2. SmokeShack | W 8.9 | 베이컨, 체리 페퍼에 쉑소스가 토핑된 치즈버거
3. Cheeseburger | W 6.9 | 포테이토 번과 비프패티, 치즈가 토핑된 치즈버거
4. Hamburger | W 5.4 | 비프패티를 기반으로 야채가 들어간 기본버거
0. 종료 | 종료
0 <- // 0을 입력
프로그램을 종료합니다.
계산기 문제의 코드를 활용해서 제품을 여러개 선택할 수 있는 키오스크를 만들고 싶었다. 이때 while 문 밖으로 나왔을때 다시 빠져나온 while문을 작동시키는 방법을 찾지 못했다.
클래스가 있어야 할 것 같아 일단은 1단계에서 요구하는 부분만 만족 시키도록 만들었다.
package com.example.kiosk.lv1; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); boolean keepRunning = true; while (keepRunning) { System.out.println("번호를 입력하여 주문을 해주세요.\n" + "[ SHAKESHACK MENU ]\n" + "1. ShackBurger | W 6.9 | 토마토, 양상추, 쉑소스가 토핑된 치즈버거\n" + "2. SmokeShack | W 8.9 | 베이컨, 체리 페퍼에 쉑소스가 토핑된 치즈버거\n" + "3. Cheeseburger | W 6.9 | 포테이토 번과 비프패티, 치즈가 토핑된 치즈버거\n" + "4. Hamburger | W 5.4 | 비프패티를 기반으로 야채가 들어간 기본버거\n" + "0. 종료 | 종료"); int firstFunc = sc.nextInt(); if (firstFunc ==1 ) { System.out.println("ShackBurger(을)를 선택하였습니다."); break; } if (firstFunc ==2 ) { System.out.println("SmokeShack(을)를 선택하였습니다."); break; } if (firstFunc ==3 ) { System.out.println("Cheeseburger(을)를 선택하였습니다."); break; } if (firstFunc == 4 ) { System.out.println("Hamburger (을)를 선택하였습니다."); break; } if (firstFunc > 4 ) { System.out.println("다시 입력해주세요."); continue; } if (firstFunc == 0) { keepRunning = false; break; } } System.out.println("키오스크를 종료합니다."); } }

작동은 되지만 기능 하나를 수행하면 그대로 종료될 수 밖에 없는 구조이다.
와중에 break;가 전부 if절 밖으로 나와있어서 계속 오류가 떴었다.
그래도 오늘은 바로 오류를 교정했다.
MenuItem 클래스와 List를 통해 관리합니다.MenuItem 클래스 생성하기이름, 가격, 설명 필드를 갖습니다.main 함수에서 MenuItem 클래스를 활용하여 햄버거 메뉴를 출력합니다.MenuItem 객체 생성을 통해 이름, 가격, 설명을 세팅합니다.newList를 선언하여 여러 MenuItem을 추가합니다.List<MenuItem> menuItems = new ArrayList<>();menuItems를 탐색하면서 하나씩 접근합니다.public static void main(String[] args) { // List 선언 및 초기화 // add 함수를 통해 new MenuItem(이름, 가격, 설명) List에 삽입 // (add 보다 더 좋은 방법이 있다면 그렇게 해도 됩니다!) // Scanner 선언 // 반복문을 활용해 List 안에 있는 MenuItem을 하나씩 출력 // 숫자를 입력 받기 // 입력된 숫자에 따른 처리 // 프로그램을 종료 // 선택한 메뉴 : 이름, 가격, 설명 }
MenuItem 클래스는 다음과 같다.
package com.example.kiosk.lv2; public class MenuItem { private String name; private Double price; private String description; // 이름 가격 설명 필드 //생성자 public MenuItem(String name, Double price, String description) { this.name = name; this.price = price; this.description = description; } }
여기까지 고쳤을땐 간단한데 왜 private final List<블라블라>블라블라 쓰고 고생했는지 모르겠다.
문제는 Main 클래스이다.
List<MenuItem> menuItems = new ArrayList<>();
이건 냅다 집어넣었는데, lv1에서 작성했던 while 문을 어떻게 활용하고 add를 어떤식으로 활용해야할 지 모르겠다.
밤 사이 잘 정리해서 내일은 튜터님에 여쭤봐야겠다..