diff --git "a/v1/backend/JAVA_LV_1_\354\225\214\353\260\224\354\235\230_\353\213\254\354\235\270/docs/README.md" "b/v1/backend/JAVA_LV_1_\354\225\214\353\260\224\354\235\230_\353\213\254\354\235\270/docs/README.md" new file mode 100644 index 0000000..7ba1ab1 --- /dev/null +++ "b/v1/backend/JAVA_LV_1_\354\225\214\353\260\224\354\235\230_\353\213\254\354\235\270/docs/README.md" @@ -0,0 +1,26 @@ +# 기능 구현 목록 + +## BotImpl + +- 주문의 종류를 enum 클래스로 명시해둔다. + +- ### 1. 프로퍼티 + + - 현재 주문 목록을 가지고 있는 map. + +- ### 2. 메서드 + + 1) takeOrder + - switch문의 조건식에 Parser 객체의 static caseCheck 메서드를 이용해 요구사항의 종류를 구분한다. + - 각 case마다 요구사항에 적절한 메서드를 불러온다. -> parser의 static split 메서드를 활용해서 매개변수로 넘겨준다. + + 2) result + - 모든 주문 목록의 가격을 합산해서 출력한다. + +## Parser + +- ### 메서드 + 1) caseCheck + - 현재 주문의 종류를 구분하여 enum 타입으로 반환하는 메서드 + 2) split + - <>를 구분자로 안의 내용만 분리해서 string[]으로 반환하는 메서드 diff --git "a/v1/backend/JAVA_LV_1_\354\225\214\353\260\224\354\235\230_\353\213\254\354\235\270/src/main/java/com/example/bot/BotImpl.java" "b/v1/backend/JAVA_LV_1_\354\225\214\353\260\224\354\235\230_\353\213\254\354\235\270/src/main/java/com/example/bot/BotImpl.java" index 029ec1b..9bc94ff 100644 --- "a/v1/backend/JAVA_LV_1_\354\225\214\353\260\224\354\235\230_\353\213\254\354\235\270/src/main/java/com/example/bot/BotImpl.java" +++ "b/v1/backend/JAVA_LV_1_\354\225\214\353\260\224\354\235\230_\353\213\254\354\235\270/src/main/java/com/example/bot/BotImpl.java" @@ -1,14 +1,125 @@ package com.example.bot; +import java.util.HashMap; +import java.util.Iterator; + +enum ReqType { + ADD_ONE, ADD_TWO, DELETE, FIND, COUNT, END +} + public class BotImpl implements JiwonBehavior { + private final HashMap menu; + + BotImpl() { + menu = new HashMap(); + } + @Override public void takeOrder(String order) { + switch (Parser.caseCheck(order)) { + case ADD_ONE: + this.addOne(Parser.split(order)); + break; + case ADD_TWO: + this.addTwo(Parser.split(order)); + break; + case DELETE: + this.delete(Parser.split(order)); + break; + case FIND: + this.find(Parser.split(order)); + break; + case COUNT: + this.count(Parser.split(order)); + break; + case END: + this.result(); + break; + } + } + + private void addOne(String[] order) { + if (menu.containsKey(order[0])) + menu.put(order[0], menu.get(order[0]) + 1); + else + menu.put(order[0], 1); + System.out.printf("네 %d원이요\n", order[0].length() * 1000); + } + + private void addTwo(String[] order) { + for (int i = 0; i < order.length; i++) { + if (menu.containsKey(order[i])) + menu.put(order[i], menu.get(order[i]) + 1); + else + menu.put(order[i], 1); + } + System.out.printf("네 %d원이요\n", order[0].length() * 1000 + order[1].length() * 1000); + } + + private void delete(String[] order) { + if (menu.containsKey(order[0])) { + menu.remove(order[0]); + System.out.println("네"); + } else + System.out.println("<" + order[0] + ">" + "안 시키셨어요"); + } + + private void find(String[] order) { + if (menu.containsKey(order[0])) { + System.out.println("<" + order[0] + ">시키셨어요"); + } else + System.out.println("<" + order[0] + ">안 시키셨어요"); + } + private void count(String[] order) { + if (menu.containsKey(order[0])) + System.out.println("<" + order[0] + ">" + menu.get(order[0]) + "개요"); + else + System.out.println("<" + order[0] + ">안 시키셨어요"); } + @Override public void result() { + int ret = 0; + Iterator it = menu.keySet().iterator(); + + while (it.hasNext()) { + String key = it.next(); // next를 호출하면 현재의 key를 불러올면서 이터레이터는 다음 값을 가리키게 된다. + + ret += key.length() * menu.get(key); + } + System.out.printf("총 %d원 입니다\n", ret * 1000); + } +} + +class Parser { + public static String[] split(String order) { + String[] ret; + ret = order.split(">"); + if (ret.length > 1 && ret[1].indexOf('<') != -1) + ret[1] = ret[1].substring(ret[1].indexOf('<') + 1); + ret[0] = ret[0].substring(1); + return ret; + } + + public static ReqType caseCheck(String order) { + if (order.charAt(order.length() - 1) == '>') { + if (order.split(">").length == 1) + return (ReqType.ADD_ONE); + else + return (ReqType.ADD_TWO); + } else if (order.charAt(order.length() - 1) == '?') { + if (order.charAt(order.length() - 2) == '나') + return (ReqType.FIND); + if (order.charAt(order.length() - 3) == '마') + return (ReqType.END); + else + return (ReqType.COUNT); + } else + return (ReqType.DELETE); } } +