Lv 2. 객체 지향 설계를 적용해 햄버거 메뉴를 클래스로 관리하기
- 햄버거 메뉴를 MenuItem 클래스와 List를 통해 관리
- 햄버거 클래스
- 메뉴의 이름의 길이에 따라 뒤에 가격과 설명의 위치가 바뀌는걸 방지하기 위해 printf를 사용했다
- 제목은 %-20s 를 사용해서 20줄이 안될 경우 공백으로 처리하게 했고 -를 붙여 왼쪽으로 정렬 시켰다!
- 20줄이 넘는 메뉴가 나온다면...? 음...혹시 다른 방법이 있을까? 20줄 넘으면 ...으로 보이게 관리할까?
- html에선 ...으로 나오게가 있는데 java에선 찾아도 안보인다.
System.out.printf("%d. %-20s | W %.1f | %s\n",count,menu.name, menu.price,menu.text);
Lv 3. 객체 지향 설계를 적용해 순서 제어를 클래스로 관리하기
public class Kiosk {
List<MenuItem> menuItems;
public Kiosk (List<MenuItem> menuItems) {
this.menuItems = menuItems;
}
public void start(){
Scanner sc = new Scanner(System.in);
while (true) {
System.out.println("[ MOMS TOUCH MENU ]");
int count = 1;
// list에 있는 값을 반복문으로 가져와 출력, 문자열의 길이를 맞추기 위해 문자열 포맷팅 사용
for (MenuItem menu : menuItems) {
System.out.printf("%d. %-20s | W %.1f | %s\n",count,menu.name, menu.price,menu.text);
count++;
}
System.out.println("0. 종료 | 종료 ");
// 숫자가 아닌 문자가 들어 왔을 때의 예외처리
try {
int n = sc.nextInt();
// 입력 값에 따른 결과 처리
if (n == 0) {
System.out.println("프로그램을 종료합니다.");
break;
} else if (n > menuItems.size()) {
System.out.println("잘못된 번호를 입력했습니다.");
} else {
System.out.printf("선택한 메뉴 : %s | W %.1f | %s\n",menuItems.get(n-1).name, menuItems.get(n-1).price,menuItems.get(n-1).text);
}
} catch (InputMismatchException e) {
System.out.println("문자가 아닌 숫자를 입력해주세요.");
sc.nextLine();
}
}
}
}
- 입력 값 예외 처리 추가
- Main 에서는 객체를 생성하고 넘겨주는 역할
- Kiosk 클래스의 start 메서드에서 입력 받는 것과 메뉴창을 띄워주는 반복문 로직 진행
- 아직까진 어려웠던 점은 없었다!