리스트 추가형식
List<String> fruits = new ArrayList<>();
// 리스트에 요소 추가
fruits.add("Apple");
fruits.add("Banana");
fruits.add("Cranberry");
따라서 과제도 다음 형식에 따라 작성해줌
List<MenuItem> menuItems = new ArrayList<>();
// List 선언 및 초기화
// add 함수를 통해 new MenuItem(이름, 가격, 설명) List에 삽입
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, "비프패티를 기반으로 야채가 들어간 기본버거"));
출력 부분
while (keepRunning) {
System.out.println("번호를 입력하여 주문을 해주세요.\n" +
"[ SHAKESHACK MENU ]\n");
for(int i=0; i<menuItems.length; i++) {
System.out.println((i+1)+". : " + menuItems.get(i));
}
System.out.println("0. 종료 | 종료");
}
원인 : List에는 Length를 쓸 수 없다.
이유:
사실 이해가 안된다! 일단은 리스트는 size로 크기를 체크할 수 있음만 이해하고 넘어가기로 함
해결 :
while (keepRunning) { System.out.println("번호를 입력하여 주문을 해주세요.\n" + "[ SHAKESHACK MENU ]\n"); for(int i=0; i<menuItems.size(); i++) { System.out.println((i+1)+". : " + menuItems.get(i)); } System.out.println("0. 종료 | 종료");
예외 처리 어떻게 하지..
try catch를 써보려고 했는데 영 삽질 시간이 길어져서 포기했다. 간단하게 if 문으로 해결했는데, 5단계를 끝내고 하면 되지 않을까 싶다.
try {
input = Integer.parseInt(); //정상적일경우 num에 데이터 입력
} catch (IOException | NumberFormatException e) { //에러 발생일 경우
System.out.println("[System] 잘못된 입력입니다. 다시 입력하세요.");
return inputInteger(); //재귀함수(자기자신 다시 실행)
}
if 문
if (input == 0 ) {
System.out.println("키오스크를 종료합니다.");
break;
} else if (input <= menuItems.size()) {
System.out.println("선택한 메뉴 : "+ menuItems.get(input - 1));
break;
} else {
System.out.println("다시 입력해주세요.");
continue;// 숫자 이외의 입력을 받았을 때 나오는 문구
}
}
// 프로그램을 종료
// 선택한 메뉴 : 이름, 가격, 설명
scanner.close();
}
또 다른 문제..
실행했을 때.메뉴가.. 주소로 뜬다
Object 상속문제
Object에 정의된 toString()메소드가 주소값을 리턴해주고 있는 것이다.
추후에 참고할 블로그 : toString 상세설명

확인:
shift*2
class 탭에서 Object of java.lang 검색

해당 클래스에 들어가 보면 다음과 같은 toString 메소드가 있는 것을 볼 수 있다.
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
해결
메인 클래스에서 toString 메소드를 재정의 해준다.
@Override
public String toString() {
return name + " | 가격: " + price + " | 설명: " + description;
}
이렇게 2단계는 무사히 끝이 났다..
main 함수에서 관리하던 전체 순서 제어를 Kiosk 클래스를 통해 관리합니다.MenuItem을 관리하는 리스트가 필드로 존재합니다.main 함수에서 관리하던 입력과 반복문 로직은 이제 start 함수를 만들어 관리합니다.List<MenuItem> menuItems 는 Kiosk 클래스 생성자를 통해 값을 할당합니다.Kiosk 객체를 생성하고 사용하는 main 함수에서 객체를 생성할 때 값을 넘겨줍니다.자바에서 파라미터란? 메소드를 선언할 때 사용되는 변수
그냥 까먹어서 적음 언젠가 벨로그에서 검색해보겠지..
시작하자마자 틀림. 작성하다 존 게 틀림없음. 큰일났음
public class Kiosk { private List<MenuItem> menuItems = new ArrayList<>(); }
Q. ? 이게 뭐예요
A. ...그냥 붙여넣기 하고 넘어갔다고 합니다.
public class Kiosk { private List menuItems; public Kiosk (List<MenuItem> menuItems) { this.menuItems = menuItems; } }
또 브레이스 문제
public void start () {
Scanner scanner = new Scanner(System.in);
boolean keepRunning = true;
while (keepRunning) {
System.out.println("번호를 입력하여 주문을 해주세요.\n" +
"[ SHAKESHACK MENU ]\n");
for(int i=0; i<menuItems.size(); i++) {
System.out.println((i+1)+"." + menuItems.get(i)); //오브젝트 상속
}
System.out.println("0. 종료 | 종료합니다.");
// 입력된 숫자에 따른 처리 | 정상 숫자 입력 - 출력, 종료, | 잘못된 입력 - 되돌아가기
System.out.println("번호를 입력하세요: ");
int input = scanner.nextInt();// 숫자를 입력 받기
if (input == 0 ) {
System.out.println("키오스크를 종료합니다.");
break;
} else if (input <= menuItems.size()) {
System.out.println("선택한 메뉴 : "+ menuItems.get(input - 1));
break;
} else {
System.out.println("다시 입력해주세요.");
continue;// 숫자 이외의 입력을 받았을 때 나오는 문구
}
}
해당 코드를 키오스크 클래스 안에 넣지 않아서 계속해서 오류가 생겼다. 어렸을적에 수학학원에서 선생님이 괄호 제대로 안본다고 정색했던 기억이 난다. 세살버릇 여든까지 간다고..
이러고 실행을 하는데 오류는 없는데 또 출력도 안되는 거다.
당연함. 키오스크 클래스만 손댔음.
Main class :
키오스크에서 입력과 출력, 리스트 관리를 하게 되었음
이제 메인클래스에는 리스트 추가와 키오스크 작동의 역할만 남아있다.
package com.example.kiosk.lv3; import java.util.ArrayList; import java.util.List; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); List<MenuItem> menuItems = new ArrayList<>(); // List 선언 및 초기화 // add 함수를 통해 new MenuItem(이름, 가격, 설명) List에 삽입 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, "비프패티를 기반으로 야채가 들어간 기본버거")); // 반복문을 활용해 List 안에 있는 MenuItem을 하나씩 출력 } }손 대기 전의 메인클래스. 키오스크를 추가해줘야한다.
Kiosk kiosk = new Kiosk(menuItems); kiosk.start();를 추가 해줬다.
0을 입력하면 프로그램이 ‘뒤로가기’되거나 ‘종료’됩니다.(종료만됨)문제는 작동은 되는데! 오류메시지 출력과 뒤로가기가 구현이 안되어있음을 이제야 깨달았다.
if (input == 0 ) { System.out.println("키오스크를 종료합니다."); break; } else if (input <= menuItems.size()) { System.out.println("선택한 메뉴 : "+ menuItems.get(input - 1)); break; } else { System.out.println("다시 입력해주세요."); continue;// 숫자 이외의 입력을 받았을 때 나오는 문구 }숫자를 입력했을때는 메시지 출력과 재생이 가능하지만
글자 등을 입력했을때 오류 메세지가 아니라 진짜 오류가 뜨는 문제가 있다.. 이건 시간 상 내일.. 해야한다..
배운 점: 컨디션 관리를 잘하자.. 약기운으로 코딩하는거 정말 괴롭다