네안녕하세요 오늘은 키오스크 만들기 프로젝트를 시행하고있는데요
우선 키오스크를 만들때 매뉴들을 확인해야겟죠?
Lv1을보시면
이렇게 위와같이 보실수있는데요
그래서 저는 우선 제일먼저 Scanner을 만들어줫습니다
//Scanner 사용
Scanner sc = new Scanner(System.in);
위와같이 말이죠
그런후 do- while 문을 사용했는데요
do {
// 메뉴
System.out.println("[ SHAKESHACK MENU ]");
System.out.println("1. ShackBurger | W 6.9 | 토마토, 양상추, 쉑소스가 토핑된 치즈버거");
System.out.println("2. SmokeShack | W 8.9 | 베이컨, 체리 페퍼에 쉑소스가 토핑된 치즈버거");
System.out.println("3. Cheeseburger | W 6.9 | 포테이토 번과 비프패티, 치즈가 토핑된 치즈버거");
System.out.println("4. Hamburger | W 5.4 | 비프패티를 기반으로 야채가 들어간 기본버거");
System.out.println("0. 종료 | 종료");
System.out.print("번호를 선택해주세요: ");
//숫자입력
int choice = sc.nextInt();
}while (sc.nextInt() != 0); //choice가 0이아니면 반복
System.out.println("키오스크를 종료합니다");
이렇게 말이죠 이렇게 Lv1은 쉽게 끝나나싶었습니다
발단:
그런데 문제가 생겻습니다
위와같이 0이 두번씩 입력이되는것이였죠
이걸 어떻게해야되나 이것저것 알아보는데
알고보니 이 Sc.nextInt()가 2번 입력되어서 2번씩 인식하는것이였죠
절정:
그래서 Sc.nextInt()를 뺀후 choice를 넣어줘봣습니다 그랬더니 오류가 뜨는것이죠
그래서 무엇이문제인가 계속 알아보니
choice가 아무설정없이 2번 입력되는것이문제였죠
그래서 do-while 문밖에 전역변수 Int choice = 0; 으로
전역변수를 설정해줫습니다
결말: 하지만 그랬어도 숫자입력인 int choice= nextInt();
부분이 오류뜨는걸 볼수있었습니다.
그래서 뭐가문젠가 보니
choice 에 int가 2번 설정되어있는걸 볼수있었죠
그래서 int 를 지워주고 최종코드를
package org.example.kiosk;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
//Scanner 사용
Scanner sc = new Scanner(System.in);
//전역변수 choice를 0으로 설정
int choice = 0;
do {
// 메뉴
System.out.println("[ SHAKESHACK MENU ]");
System.out.println("1. ShackBurger | W 6.9 | 토마토, 양상추, 쉑소스가 토핑된 치즈버거");
System.out.println("2. SmokeShack | W 8.9 | 베이컨, 체리 페퍼에 쉑소스가 토핑된 치즈버거");
System.out.println("3. Cheeseburger | W 6.9 | 포테이토 번과 비프패티, 치즈가 토핑된 치즈버거");
System.out.println("4. Hamburger | W 5.4 | 비프패티를 기반으로 야채가 들어간 기본버거");
System.out.println("0. 종료 | 종료");
System.out.print("번호를 선택해주세요: ");
//숫자입력
choice = sc.nextInt();
}while (choice != 0); //choice가 0이아니면 반복
System.out.println("키오스크를 종료합니다");
}
}
위와같이 해줫더니 깔끔하게
잘 종료되는걸 볼수있었습니다.
자이제 lv 2를 해봣는데요
위의 조건을 받았는데요
우선저는 MenuItem 클래스를 만들어줫습니다.
이제 실력이 좀늘었는지 List관리는 쉽게 금방 만들었습니다.
아마 어제의 클래스 구현실습이 도움이 많이 되준거같습니다
package org.example.kiosk;
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;
}
//getter
public String getName(){
return name;
}
public double getPrice() {
return price;
}
public String getDescription(){
return description;
}
}
위와같이 코드를 만들어줫구
이제 main부분에서 이름과 가격 설명을 나열한 키오스크에 넣어줄 음식을 입력해줫습니다.
우선그전에 List선언을 해줘야겟죠?
List<MenuItem> menuItems = new ArrayList<>();
위와같이 만든 MenuItem을끌고과준후
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, "비프패티를 기반으로 야채가 들어간 기본버거"));
위와같이 add.를이용해줘서 MenuItem에서 만들어줫던 생성자를 이용해 리스트인 menuItems에 삽입해줫습니다
그후
향상된 for문을이용해서
//for문을 이용해 매뉴 출력
for (MenuItem food :menuItems) {
System.out.println( food.getName() + " | W " + food.getPrice() + " | " + food.getDescription());
}
위와같이 해줫었는데 여기서 문제아닌 문제가생겼었습니다 바로 음식이름 앞에 숫자가 안붙는다는 점이였죠
물론 앞에 붙게해주는 코드가 있을거같긴하지만 향상된 for문을 만들어주는데는 성공했으니 숫자붙이기
쉬운 일반 for문을 연습할김에 써주자 라고 생각을하엿습니다
향상된 for문을 하면 이렇게나오는걸 보실수있죠
그래서
for (int i = 0; i < menuItems.size(); i++) {
MenuItem food = menuItems.get(i);
System.out.println((i + 1.) + food.getName() + " | W " + food.getPrice() + " | " + food.getDescription());
}
위와같이해줘서 i는 0부터 시작으로해줫으니 1번음식은 1이나와야되서 +1을해줫습니다
그런데 위와같이하니 또 문제가생겼습니다 1.을 소숫점으로 봐서 1.0 2.0 3.0 으로 붙어서 이상해지는겁니다
그래서 "."을이용해서 따로빼줫습니다
for (int i = 0; i < menuItems.size(); i++) {
MenuItem food = menuItems.get(i);
System.out.println((i + 1) + "." + food.getName() + " | W " + food.getPrice() + " | " + food.getDescription());
}
위와같이말이죠
그랬더니 잘되는걸보실수있으십니다.
그후 매뉴선택및출력을 만들어야됫는데 여기가 살짝 고비였습니다.
if (choice != 0) {
if (choice <= 4) {
MenuItem select = menuItems.get(choice - 1);//매뉴선택
System.out.println("선택한 메뉴:" + select.getName());
System.out.println("가격:" + select.getPrice());
System.out.println("설명:" + select.getDescription());
} else {
System.out.println("다시선택해주세요.");
}
}
} while (choice != 0); //choice가 0이아니면 반복
일단 현재 코드는 이렇게 잘만들어놧지만
처음엔
if (choice != 0) {
if (choice <= 4) {
MenuItem select = menuItems.get(choice);//매뉴선택
System.out.println("선택한 메뉴:" + menuItems.getName());
System.out.println("가격:" + menuItems.getPrice());
System.out.println("설명:" + menuItems.getDescription());
} else {
System.out.println("다시선택해주세요.");
}
}
위와같이 코드를 짠것이죠
그래서 왜이런지 아무리 알아봐도
답이안나오길래 고민하다 튜터님께 가서 물어봣습니다
그랬더니 그럼튜터님이
MenuItem select = menuItems.get(choice);//매뉴선택
이쪽부분을 해석해보자 하셧습니다
우선 MenuItem은 내가만든 클래스였고 select는 내가 선택해주기위해 임의로 정해준이름 이였습니다
그다음 menuItems는 MenuItem에 있는 코드를 가져와주기위한 List고 그걸 get해서 choice 선택해준다 였습니다
그랬더니 나는 그냥 리스트에서 뽑아오려했던거였구나 그리고 select 를만들어준이유가있는데 그걸안썻구나를
깨달았죠 그래서 바로 select 로 바꿔줘서 코드를 실행해주니 아주잘되는것을 볼수있었습니다
아 그리고
if (choice <= 4) {
MenuItem select = menuItems.get(choice);//매뉴선택
이부분을 보시면 뭔가 이상한게있죠 바로 choice는 0부터시작되서
1을누르면 2번인 smokeshack이 나오는것입니다 그래서 -1 을넣어줘서 1을누르면 1번음식이나오게끔해줫습니다
그랬더니
이렇게 잘나오는걸 보실수있으십니다.
오늘은 여기까지 하고 내일 Lv5까지 해보겟습니다.
'과제를하면서 트러블슈팅' 카테고리의 다른 글
키오스크 만들기 Lv4 (0) | 2025.01.17 |
---|---|
키오스크 만들기 Lv3 (0) | 2025.01.16 |
클래스 구현실습 (4) | 2025.01.14 |
계산기 만들기 Lv2-3,4 (0) | 2025.01.10 |
계산기 만들기 Lv2 (0) | 2025.01.09 |