[해결하려 한 원래 문제]
[해결 과정 중 겪은 문제]
package com.example.kiosk.level2;
// [A] MenuItem 클래스
public class MenuItem {
private String name;
private double price;
private String description;
public int menuNum=1;
// [수정 전] 멤버변수 총 3개: name, price, description
// [수정 후] 멤버변수 총 4개: menuNum 추가 선언 및 1로 초기화
public MenuItem(String name, double price, String description) {
this.name = name;
this.price = price;
this.description = description;
}
public void getEachItem() {
System.out.println(this.menuNum+". "+this.name + " | W " + this.price + " | " + this.description);
this.menuNum++;
/*
[수정 전]
System.out.println(this.name + " | W " + this.price + " | " + this.description);
[수정 후]
[1] println() 안에 추가: this.menuNum+". "+
[2] println() 밑에 추가: this.menuNum++;
*/
}
}
package com.example.kiosk.level2;
// [B] main
import java.util.*;
public class KioskLvTwo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println();
System.out.println("[ GRILL&THRILL MENU ]");
List<MenuItem> menuItems = new ArrayList<>();
MenuItem basicBurger = new MenuItem("BasicBurger", 6.9, "토마토, 양상추, 쉑소스가 토핑된 치즈버거");
MenuItem grilledThrill = new MenuItem("GrilledThrill", 8.9, "베이컨, 체리 페퍼에 쉑소스가 토핑된 치즈버거");
MenuItem cheeseburger = new MenuItem("Cheeseburger", 6.9, "포테이토 번과 비프패티, 치즈가 토핑된 치즈버거");
MenuItem hamburger = new MenuItem("Hamburger", 5.4, "비프패티를 기반으로 야채가 들어간 기본버거");
Collections.addAll(menuItems, basicBurger, grilledThrill, cheeseburger, hamburger);
for (MenuItem eachItem : menuItems) {
eachItem.getEachItem();
/*
[수정 전]
int menuNumber = 1;
for (MenuItem eachItem : menuItems) {
System.out.print((menuNumber++) + ". ")
eachItem.getEachItem();
}
[수정 후]
[1] 변수 선언 없이 향상된 for문 작성
[2] 삭제: System.out.print((menuNumber++) + ". ")
*/
}
System.out.println("0. 종료 | 종료");
}
}
getEachItem() 메서드와 print() 메서드를 같이 쓰지 않고 getEachItem()만 쓰려고 했다가 숫자 1만 나열되어서 그냥 원래 코드로 제출해 버릴까 진지하게 고민했다. 개발에서는 콘솔(console)에 출력된 문장만이 정답이라 제출해도 상관은 없었지만, 자존심이 허락하지 않았다.
[원인]
package com.example.kiosk.level2;
// [A] MenuItem 클래스
public class MenuItem {
private String name;
private double price;
private String description;
public int menuNum=1;
/*
[오답] 정수형 타입 menuNum 선언 및 1로 초기화
[정답] static을 사용하거나 매개변수를 활용하거나
*/
public MenuItem(String name, double price, String description) {
this.name = name;
this.price = price;
this.description = description;
}
public void getEachItem() {
System.out.println(this.menuNum+". "+this.name + " | W " + this.price + " | " + this.description);
this.menuNum++;
}
}
원인은 MenuItem 클래스에서 정수형 int 타입 변수 menuNum을 선언하고 1로 초기화한 데에 있었다. 의도와는 다르게, getEachItem() 메서드를 호출할 때 1에 1이 더해져 2가 되었다. 이 부분은 메인(main)에서 향상된 for문을 수정 없이 두 번 썼을 때 확인할 수 있다.
package com.example.kiosk.level2;
// [B] main
import java.util.*;
public class KioskLvTwo {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println();
System.out.println("[ GRILL&THRILL MENU ]");
List<MenuItem> menuItems = new ArrayList<>();
MenuItem basicBurger = new MenuItem("BasicBurger", 6.9, "토마토, 양상추, 쉑소스가 토핑된 치즈버거");
MenuItem grilledThrill = new MenuItem("GrilledThrill", 8.9, "베이컨, 체리 페퍼에 쉑소스가 토핑된 치즈버거");
MenuItem cheeseburger = new MenuItem("Cheeseburger", 6.9, "포테이토 번과 비프패티, 치즈가 토핑된 치즈버거");
MenuItem hamburger = new MenuItem("Hamburger", 5.4, "비프패티를 기반으로 야채가 들어간 기본버거");
Collections.addAll(menuItems, basicBurger, grilledThrill, cheeseburger, hamburger);
for (MenuItem eachItem : menuItems) {
eachItem.getEachItem();
}
System.out.println("0. 종료 | 종료");
System.out.println();
for (MenuItem eachItem : menuItems) {
eachItem.getEachItem();
}
System.out.println("0. 종료 | 종료");
}
}
확인 차원에서 위와 같이 향상된 for문을 두 번 쓴 다음 프로그램을 실행했다.
그나마 종료 문구는 반복문 밖에 작성해서 일관되게 0이 출력되니 다행이라고 해야 할까. 머리를 싸맨 끝에 튜터님과 팀원분에게 힌트를 얻어 두 가지 해결법을 얻었다. 누구에게 물어보든 정답을 바로 알려주지 않고 스스로 할 수 있도록 힌트만 주어서 진심으로 감사했다.
[해결]
'Troubleshooting: 무엇이 문제였는가? > 본캠프 2주 차: 키오스크 만들기' 카테고리의 다른 글
4단계: "get() 메서드에 가장 적절한 인덱스(index)는?" (0) | 2024.11.27 |
---|---|
3단계: "Variable 'menuItems' initializer 'new ArrayList<>()' is redundant" (0) | 2024.11.25 |
3단계: "Field can be converted to a local variable" (0) | 2024.11.25 |
3단계: "아이고, 믿는 sout에 발등 찍힌다더니!" (0) | 2024.11.25 |
1단계: "반복문 밖에서 변수를 선언했더니 햄버거가 비처럼 내리네!" (0) | 2024.11.24 |