활용할 매개변수가 많아서 처음에 되게 어려운 문제다 라고 생각했다.
나는 switch case문에서 ineq 값 별로 if 문을 넣고 eq.equals로 푸는 생각을 했다.
그렇게 생각하고 이런 코드를 짰는데...
class Solution {
public int solution(String ineq, String eq, int n, int m) {
int answer = 0;
switch (ineq) {
case ">" : if ("=".equals(eq)) {
answer = n >= m ? 1 : 0;
} else {
answer = n > m ? 1 : 0;
}
case "<" : if ("=".equals(eq)) {
answer = n <= m ? 1 : 0;
} else {
answer = n < m ? 1 : 0;
}
}
return answer;
}
}
분명히 맞다... 근데 왜 틀렸을까.. 왜 테스트 2에 결괏값이 1이 나왔을까..
비교 연산을 잘못했나..? 아닌데...
생각해보니 break를 안넣어줬다..
switch case문을 실제로 처음 써보니 이런 실수를 했다.
class Solution {
public int solution(String ineq, String eq, int n, int m) {
int answer = 0;
switch (ineq) {
case ">" : if ("=".equals(eq)) {
answer = n >= m ? 1 : 0;
} else {
answer = n > m ? 1 : 0;
}
break;
case "<" : if ("=".equals(eq)) {
answer = n <= m ? 1 : 0;
} else {
answer = n < m ? 1 : 0;
}
break;
}
return answer;
}
}
키오스크 만들기 개인 프로젝트 시작
키오스크를 만드는 개인 프로젝트를 시작했다.
우선 나는 필수 사항들을 보는데도 도무지 감이 안잡혔다.
머리가 그냥 백지상태
노트에 어떤 걸 구현해야 할까... 어떻게 해야할까.. 등을 대충 추상화했다.
나는 뭘해야할지 모를 때 우선 막... 적어본다.. 막이다.. 막...
필수사항에 상속을 하라고 하는데, 어떤 이유로 상속을 하라는 거지?가 처음엔 이해 안됐다.
아.. 카테고리엔 이름과 카테고리에 대한 설명이 있는데
상품에도 상품 이름과, 설명이 있으니 상속하고 상품에 지닌 특징을 추가하라는 것이구나...
이해하면서 상속을 해야하는 이유도 점차 이해가기 시작했다.
메소드는 어떤 메소드들이 필요할까? 이러한 메소드를 활용하기 위해서는 어떤 필드가 필요하고, 어떤 클래스에서 사용을 할까?
곰곰히 생각하면서 또 이런 생각이 들었다.
웹 개발 프로젝트를 할 때는 와이어프레임 툴을 사용했는데 자바엔 이런 건 없을까..?
클래스 다이어그램 이라는 게 있었다...
내가 뭘해야 하는지 계속 고민하면서 객체에 들어갈 것들을 정리했다.
이게 백지상태인 나를 해결해주는데에 큰 도움이 됐다.
Menu Class
메뉴 클래스 인스턴스화를 배열로 시켜 생성자에 매개변수를 Name, Explain으로 받고
메인화면에 출력시킬 것이다
Product Class
메뉴 클래스 설명과 비슷한데, 추가로 필드에 price를 추가하고 생성자에 매개변수를 Name, Explain, Price로 받고 상품 선택화면에 출력할 것이다.
Order Class
basket이라는 List에 주문한 것을 담아야한다.
addOrder 메소드를 이용해 담아 줄 것이고
cancleOrder 메소드를 통해 주문을 취소하면 List 클리어를 할 것이다.
getOrder메소드를 사용하면 basket에 담긴 리스트를 보여줄것이고
orderNumber메소드 통해 주문 번호를 뽑아주는 메소드
returnMain 메소드를 통해 메인화면으로 돌아가는 메소드를 만들 것이다.
public class Menu {
// 필드
String name; // 이름
String explain; // 설명
// 생성자
public Menu (String name, String explain) {
this.name = name;
this.explain = explain;
}
// 메소드
// 하위 객체
}
// Menu를 상속 받는 Product
public class Product extends Menu {
// 필드
Double price; // 버거 세트 가격
// 생성자
public Product(String name, String explain, Double price) {
super(name, explain);
this.price = price;
}
// 메소드
// 하위 객체
}
import java.util.ArrayList;
import java.util.Scanner;
import java.util.Timer;
import java.util.TimerTask;
public class Order {
// 필드
int orderNumber;
double totalPrice;
// 생성자
public Order(){
}
// 하위 객체
ArrayList<Product> basket = new ArrayList<>();
Scanner orderScanner = new Scanner(System.in);
Display display = new Display();
// 메소드
void addBasket (Product orderProduct) {
// 여기에 주문을 추가하는 메소드가 들어갈 것
// basket에 담고 메인으로 돌아가야함
System.out.println(orderProduct.name + orderProduct.price + orderProduct.explain);
System.out.println("위 메뉴를 장바구니에 추가하시겠습니까?");
System.out.println("1. 확인 2. 취소");
orderScanner.nextInt();
this.basket.add(orderProduct);
System.out.println(orderProduct.name + "가 장바구니에 추가되었습니다.");
returnMain();
}
void getBasket () {
// 주문 내역 확인 및 토탈 가격 확인
System.out.println("[ Orders ]");
// 이 부분 아직 구현 못함
System.out.println(basket.toString());
System.out.println("[ Total ]");
// basket 리스트의 가격을 빼와서 sum 할 것
System.out.println("가격!!!!!!!");
System.out.println();
System.out.print("1. 주문하기 2. 메뉴판");
System.out.println();
int orderSelect = orderScanner.nextInt();
if (orderSelect == 2){
returnMain();
}
}
void cancleBasket () {
// 여기에 주문을 전부 취소하는 메소드가 들어갈 것
// 진행하던 주문을 취소하시겠습니까?
System.out.println("진행하던 주문을 취소하시겠습니까?");
// 스캐너로 확인, 취소
// 캔슬 하고 메인으로 다시 돌아가야 함
returnMain();
}
int setOrderNumber () {
// 여기에 주문 번호를 넣어주는 메소드가 들어갈 것
// orderNumber++..?
// 주문 번호 주고 3초 뒤 메인으로 다시 돌아가야 함
// Timer 유틸 쓸거임!! 공부하고 적용
Timer timer = new Timer();
returnMain();
return setOrderNumber();
}
void returnMain () {
// 이걸 디스플레이에 넣는 편이 더 좋을 거 같다.
// 메인화면으로 돌아가는 메소드 작성
System.out.println();
display.getMain();
}
}
메인...
import java.util.*;
public class Main {
public static void main(String[] args) {
Order order = new Order();
Menu[] mainMenu = new Menu[]{
new Menu("햄버거 세트","햄버거 세트입니다."),
new Menu("햄버거 단품", "햄버거 단품입니다."),
new Menu("사이드", "사이드 메뉴입니다.")
};
// 여기에 있는 것들이 리턴메인, 메인 메소드로 옮겨질 것임
System.out.println("버커킹 에 오신걸 환영합니다.");
System.out.println("아래 메뉴판을 보시고 메뉴를 골라 입력해주세요");
System.out.println();
for (int i = 0; i < mainMenu.length; i++) {
System.out.println(i+1 + ". " + mainMenu[i].name + " | " + mainMenu[i].explain);
}
System.out.println();
Scanner mainScanner = new Scanner(System.in);
int number = mainScanner.nextInt();
if (number == 1) {
Product[] burgerSetMenu = new Product[]{
new Product("햄버거 세트 1","햄버거 세트 1입니다.",5000.0),
new Product("햄버거 세트 2","햄버거 세트 2입니다.",5000.0),
new Product("햄버거 세트 3","햄버거 세트 3입니다.",5000.0)
};
System.out.println("버커킹 에 오신걸 환영합니다.");
System.out.println("아래 상품메뉴판을 보시고 상품을 골라 입력해주세요");
System.out.println();
System.out.println("[ " + mainMenu[0].name + " MENU ]");
for (int i = 0; i < burgerSetMenu.length; i++) {
System.out.println(i+1 + ". " + burgerSetMenu[i].name + " | " + burgerSetMenu[i].explain+ " | " + burgerSetMenu[i].price);
}
System.out.println("4. 장바구니 확인");
System.out.println();
int setOrder = mainScanner.nextInt();
if (setOrder == 1) {
order.addBasket(burgerSetMenu[0]);
}
if (setOrder == 4) {
order.getBasket();
}
} else if (number == 2) {
Product[] burgerMenu = new Product[]{
new Product("햄버거 단품 1","햄버거 단품 1입니다.",5000.0),
new Product("햄버거 단품 2","햄버거 단품 2입니다.",5000.0),
new Product("햄버거 단품 3","햄버거 단품 3입니다.",5000.0)
};
System.out.println("버커킹 에 오신걸 환영합니다.");
System.out.println("아래 상품메뉴판을 보시고 상품을 골라 입력해주세요");
System.out.println();
System.out.println("[ " + mainMenu[1].name + " MENU ]");
for (int i = 0; i < burgerMenu.length; i++) {
System.out.println(i+1 + ". " + burgerMenu[i].name + " | " + burgerMenu[i].explain + " | " + burgerMenu[i].price);
}
} else if (number == 3) {
Product[] sideMenu = new Product[]{
new Product("사이드 1","사이드 1입니다.",5000.0),
new Product("사이드 2","사이드 2입니다.",5000.0),
new Product("사이드 3","사이드 3입니다.",5000.0)
};
System.out.println("버커킹 에 오신걸 환영합니다.");
System.out.println("아래 상품메뉴판을 보시고 상품을 골라 입력해주세요");
System.out.println();
System.out.println("[ " + mainMenu[2].name + " MENU ]");
for (int i = 0; i < sideMenu.length; i++) {
System.out.println(i+1 + ". " + sideMenu[i].name + " | " + sideMenu[i].explain);
}
}
}
}
우선은 이렇게 구현했다.
저 주석들.. 구현을 하는데, 헷갈리거나, 구현해야하는 것들, 머릿속에 스쳐지나가는 것들.. 전부 적어주기 위함이다.
근데 이제 메인이 너무 지저분하다.. 그래서 생각한 것이
화면 전용 클래스를 만들고 화면 메소드를 새로 만들자이다....
getMain에 Main에 처음 써놨던 것들을 붙여넣어주고 Main에서는 getMainDisplay... getProductDisplay.... 이런 식으로 깔끔하게 적어주면 될 거 같다. 블로그 쓰면서 점점 구체화가 되가는데, 오늘 잘 때 계속 생각나서 잠 안 올듯
import java.util.*;
public class Main {
public static void main(String[] args) {
Order order = new Order();
Display display = new Display();
// 메인 화면을 불러오는 메소드
display.getMain();
Scanner mainScanner = new Scanner(System.in);
int number = mainScanner.nextInt();
if (number == 1) {
Product[] burgerSetMenu = new Product[]{
new Product("햄버거 세트 1","햄버거 세트 1입니다.",5000.0),
new Product("햄버거 세트 2","햄버거 세트 2입니다.",5000.0),
new Product("햄버거 세트 3","햄버거 세트 3입니다.",5000.0)
};
System.out.println("버커킹 에 오신걸 환영합니다.");
System.out.println("아래 상품메뉴판을 보시고 상품을 골라 입력해주세요");
System.out.println();
// System.out.println("[ " + mainMenu[0].name + " MENU ]");
for (int i = 0; i < burgerSetMenu.length; i++) {
System.out.println(i+1 + ". " + burgerSetMenu[i].name + " | " + burgerSetMenu[i].explain+ " | " + burgerSetMenu[i].price);
}
System.out.println("4. 장바구니 확인");
System.out.println();
int setOrder = mainScanner.nextInt();
if (setOrder == 1) {
order.addBasket(burgerSetMenu[0]);
}
if (setOrder == 4) {
order.getBasket();
}
} else if (number == 2) {
Product[] burgerMenu = new Product[]{
new Product("햄버거 단품 1","햄버거 단품 1입니다.",5000.0),
new Product("햄버거 단품 2","햄버거 단품 2입니다.",5000.0),
new Product("햄버거 단품 3","햄버거 단품 3입니다.",5000.0)
};
System.out.println("버커킹 에 오신걸 환영합니다.");
System.out.println("아래 상품메뉴판을 보시고 상품을 골라 입력해주세요");
System.out.println();
// System.out.println("[ " + mainmenu[1].name + " MENU ]");
for (int i = 0; i < burgerMenu.length; i++) {
System.out.println(i+1 + ". " + burgerMenu[i].name + " | " + burgerMenu[i].explain + " | " + burgerMenu[i].price);
}
} else if (number == 3) {
Product[] sideMenu = new Product[]{
new Product("사이드 1","사이드 1입니다.",5000.0),
new Product("사이드 2","사이드 2입니다.",5000.0),
new Product("사이드 3","사이드 3입니다.",5000.0)
};
System.out.println("버커킹 에 오신걸 환영합니다.");
System.out.println("아래 상품메뉴판을 보시고 상품을 골라 입력해주세요");
System.out.println();
// System.out.println("[ " + mainmenu[2].name + " MENU ]");
for (int i = 0; i < sideMenu.length; i++) {
System.out.println(i+1 + ". " + sideMenu[i].name + " | " + sideMenu[i].explain);
}
}
}
}
import java.util.Scanner;
public class Display {
// 생성자
public Display () {}
// 메소드
void getMain() {
System.out.println("버커킹 에 오신걸 환영합니다.");
System.out.println("아래 메뉴판을 보시고 메뉴를 골라 입력해주세요");
System.out.println();
for (int i = 0; i < mainMenu.length; i++) {
System.out.println(i+1 + ". " + mainMenu[i].name + " | " + mainMenu[i].explain);
}
System.out.println();
}
// 하위 객체
Menu[] mainMenu = new Menu[]{
new Menu("햄버거 세트","햄버거 세트입니다."),
new Menu("햄버거 단품", "햄버거 단품입니다."),
new Menu("사이드", "사이드 메뉴입니다.")
};
}
// System.out.println("[ " + mainMenu[0].name + " MENU ]");
이 부분은 인스턴스 선언 부분이 Display 하위 객체로 들어가며 못쓰게돼서 일단 주석처리 해뒀다..
간단해보이는 문젠데 지금 머리에 과부하가 온 건지 더이상 생각이 안난다..
내일은 상품 메뉴 등등 디스플레이에 넣고... 키오스크가 계속 돌아가게 하는 것도 구현하고...
Order 클래스에 있는 returnMain 이걸 Display에 넣어주고 깃 푸쉬하고
계속 리팩토링 하면서 Class의 사용처를 명확히 하고 코드 정리를 좀 해야겠다는 생각..
잡담
지금 마음에 안 드는 부분이 많이 보이는데 마음에 안 들지만 마음에 들게끔 바꾸는 법도 생각이 안난다.
몸으로는 이해를 하지만 머리로 이해를 못하는 느낌..? 이거 쓰면 되겠다 이렇게 하면 되겠다. 하는데!!!
막상 설명은 제대로 못하겠다.
진짜 머리 쥐어뜯으면서 설계하고 구현했다.. 수료하고나면 대머리 돼있을듯
진심으로.. 나만 그런 건가... 코딩 몰입해서 하면, 끝나고 몇분동안은 한국말을 잘 못하는... 이상한 일이... 일어난다...
한시간마다.. 내가 이걸 어떻게 만들고 있지..? 그런 생각도 들기도 하고..
공부를 미친듯이 해야겠다... 지나고 보면... 지금 이 시절이 초보스럽게 느껴지겠지...
'TIL' 카테고리의 다른 글
TIL 2023-10-20 깊은 고뇌, 추상 클래스와 인터페이스 차이 (0) | 2023.10.20 |
---|---|
TIL 2023-10-19 키오스크 프로젝트 장바구니 주문 구현 메소드 (0) | 2023.10.19 |
TIL 2023-10-17 매개변수, 인자, 가변길이란 무엇인가 (0) | 2023.10.17 |
TIL 2023-10-16 문자열 겹쳐쓰기, 객체지향 4가지 특징 (0) | 2023.10.16 |
TIL 2023-10-13 일기, 배열.length, Collection Map, 대소문자 바꿔서 출력하기 (0) | 2023.10.13 |