팀 github : https://github.com/Kinburger/KingBurGer
GitHub - Kinburger/KingBurGer
Contribute to Kinburger/KingBurGer development by creating an account on GitHub.
github.com
fun addmenus1(menu: Menu) {
if (money >= menu.price) {
Cart.menus1.add(menu)
money -= menu.price
} else {
println("잔액은 ${money}원으로 ${menu.price - money}이 부족해서 주문할 수 없습니다.")
}
}
시작은 이 코드였다. 해당코드는 Object속에 있는 코드인데
상황정리를 하자면
각 메뉴 카테고리 별로 클래스가 있는데
예를들어
if (selec == 1) {
for ((menu) in selectedMenus) {
Cart.addmenus((menu))
}
println("메뉴가 장바구니에 추가되었습니다.\n")
println("장바구니 목록")
for ((menu, flavor) in selectedMenus) {
println("메뉴: ${menu.name}가격: ${menu.price}원\t\t설명: ${menu.introduce}\t맛: ${flavor}")
}
return Play().run()
}
위 코드는 아이스크림 카테고리 클레스인데
4종류의 카테고리별로 각각 장바구니에 추가되게 만들었었다.
하지만 장바구니에 추가한다음 다시 장바구니를 열어서 구매목록으로 옴기는데 소지금과 메뉴가격비교까지 해야했다.
문제는 처음의 코드를 써서 각카테고리별로 불러다썼는데(Object클래스 내의 메서드)
얘를 새로만든 구매목록(Order클래스)로 불러 올 수가 없다.
저 menu라는 매개변수를 가져올 수가 없다.
또한 해당 Object를 클래스로 만들어서 인스턴스화 시킬수도없다.
object Cart : Item() {
val menus: MutableList<Menu> = mutableListOf()
val menus1: MutableList<Menu> = mutableListOf()
var money: Int = 0
fun addmenus(menu: Menu) {
menus.add(menu)
}
fun addmenus1(menu: Menu) {
if (money >= menu.price) {
Cart.menus1.add(menu)
money -= menu.price
} else {
println("잔액은 ${money}원으로 ${menu.price - money}이 부족해서 주문할 수 없습니다.")
}
}
}
fun Inputmoney(): Int {
while (true) {
try {
println("초기 자본을 입력해주세요")
val money1: String? = readLine()
var money = money1?.toInt() ?: -1
if (money >= 0) {
return money
}
} catch (e: java.lang.Exception) {
println("초기자본을 다시 입력해주세요\n")
}
}
}
얘가 각 메뉴 카테고리별 클래스에서 처음 장바구니로 쓰는 앤데
Object로 안쓰면 장바구니에 담는 메뉴들이 누적이 안된다.
매개변수를 가져올 수도 없고 얘를 클래스로 만들 수도 없다.
구매목록 클래스도 만들어놓고 이불깔고 방정리 다 해놨는데 정작
fun addmenus1(menu: Menu) {
if (money >= menu.price) {
Cart.menus1.add(menu)
money -= menu.price
} else {
println("잔액은 ${money}원으로 ${menu.price - money}이 부족해서 주문할 수 없습니다.")
}
}
얘를 가져올 수 가 없다. 얘만 가져오면 프로젝트 4단계까지 완료 하고 꿀잠잘텐데
진짜 별짓다한거같다. 이거 하나로 5시간이 넘는 시간이 흘렀다. 더 이상 똥고집을 부릴 수 없었다.
이건 팀 프로젝트니까
결국 존경하는 튜터님 꼐서
fun addMenus1(){
for(i in 0 until menus.size){
val menuItem = menus[i]
if (money >= menuItem.price) {
Cart.menus1.add(menuItem)
money -= menuItem.price
} else {
println("잔액은 ${money}원으로 ${menuItem.price - money}이 부족해서 주문할 수 없습니다.")
}
}
}
이렇게 고쳐주셔서 해결해버렸다.
-요약하면
1. menus의 인덱스를 0부터 menus인덱스 -1 까지 i에 담고, 즉 menus의 모든 칸을 인덱스(i)에담아서 // ( until은 마지막 값은 포함하지 않는다. 그러므로 -1)
2. menus에 담기는 메뉴들을 모두 menuItem에 담아서
3. 담긴 menuItem들을 메뉴가격들과 비교해서 소지금이 메뉴합계보다 많으면 구매목록(menus1리스트)에 추가하고
4. 소지금- 메뉴합계 = 남은 소지금
5. 만약 사먹을 돈도없으면 "현재 잔액은 (소지금) 으로 (부족한금액)이 부족해서 주문할 수 없습니다." print한다.
6. 이 함수를 구매목록 클래스(Order)에서 Cart.addMenus1() 이 한마디로 불러와버리고 해결해버렸다.
-배운점
1. 첫번째 내가 해결못했던 코드는 함수를 객체 외부로가져가서 구매가능여부를 판단했기때문에 매개변수를 외부에서 가져와야했고
2. 두번째 튜터선생님이 알려주신 방법은 애초에 함수를 객체 내부에서 돌려보면서 메뉴를 하나하나 구매가능여부를 확인이 끝난상태여서 바로 가져다 쓸 수 있다는데
3. 뭐라는지 모르겠다 내식대로 이해하기로 했다.
정리하자면 첫번째 코드는 매서드 자체에서 Menu를 불러와야했고 두번째 코드는 에초에 매서드에 불러와야되는 변수가 없었고 함수내에서 모든걸 해결했기때문에 바로 불러 올 수 있었다.
즉, 저런상황(매개변수 떄문에 해당함수를 써야되는데 못쓰는 상황이면 방향성을 애초에 함수가 매개변수를 필요없게 만들도록 생각해보자)
-후기
정말 감사한데, 너무 감사한데
직접 해결하지 못해서 조금 찜찜했다.
최소한 이해는 확실하게 해야지.
혹여 누군가 보고 내가 잘못알고있다고 생각한다면 언제든 반박해주길 바란다.
재대로 이해하는게 중요하지, 기분나쁘고 그딴거 없다.
반박 격렬히 환영한다. 배우고싶다.
'TIL, WIL(일기)' 카테고리의 다른 글
23.07.31 layout (0) | 2023.07.31 |
---|---|
23.07.28 WIL (0) | 2023.07.28 |
23.07.26 (2) | 2023.07.26 |
23.07.25 리스트 만들기 (0) | 2023.07.25 |
23.07.24(1탄 : 삽질의 시작) (1) | 2023.07.24 |