From 25d4bcf3fffa5efce4b14c9851259dd8a8339240 Mon Sep 17 00:00:00 2001 From: yslee96 Date: Wed, 1 Feb 2023 12:27:18 +0900 Subject: [PATCH 1/2] =?UTF-8?q?=EA=B8=B0=EB=B3=B8=EC=9A=94=EA=B5=AC?= =?UTF-8?q?=EC=82=AC=ED=95=AD=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/stringCalculator/Calculator.java | 30 +++++++++++++++++++ src/main/java/stringCalculator/Main.java | 19 ++++++++++++ src/main/java/stringCalculator/Operator.java | 26 ++++++++++++++++ 3 files changed, 75 insertions(+) create mode 100644 src/main/java/stringCalculator/Calculator.java create mode 100644 src/main/java/stringCalculator/Main.java create mode 100644 src/main/java/stringCalculator/Operator.java diff --git a/src/main/java/stringCalculator/Calculator.java b/src/main/java/stringCalculator/Calculator.java new file mode 100644 index 0000000..ca9c30b --- /dev/null +++ b/src/main/java/stringCalculator/Calculator.java @@ -0,0 +1,30 @@ +package stringCalculator; + +import java.util.regex.Pattern; + +public class Calculator { + + private static final Pattern regExp = Pattern.compile("^[0-9]*$"); //operand, operator 구분 용도 + + public int calculate(String[] inputExp){ + + int result = 0; + // 맨처음 숫자 더해짐 + Operator currentOperator = Operator.PLUS; + + for(String input : inputExp){ + if(regExp.matcher(input).find()){ + result = currentOperator.operate(result, Integer.parseInt(input)); + continue; + } + // 연산자 매칭 + for(Operator operator : Operator.values()){ + if(operator.getSymbol().equals(input)){ + currentOperator = operator; + } + } + } + + return result; + } +} diff --git a/src/main/java/stringCalculator/Main.java b/src/main/java/stringCalculator/Main.java new file mode 100644 index 0000000..1fcf0e5 --- /dev/null +++ b/src/main/java/stringCalculator/Main.java @@ -0,0 +1,19 @@ +package stringCalculator; + +import java.util.Scanner; + +public class Main { + + public static void main(String[] args) { + Calculator calculator = new Calculator(); + String[] input = receiveInput(); + int result = calculator.calculate(input); + System.out.println("결과 : " + result); + } + + public static String[] receiveInput() { + Scanner sc = new Scanner(System.in); + String input = sc.nextLine().replaceAll("\\s+", " "); + return input.split(" "); + } +} diff --git a/src/main/java/stringCalculator/Operator.java b/src/main/java/stringCalculator/Operator.java new file mode 100644 index 0000000..ea20344 --- /dev/null +++ b/src/main/java/stringCalculator/Operator.java @@ -0,0 +1,26 @@ +package stringCalculator; + +import java.util.function.BiFunction; + +public enum Operator { + PLUS("+", (first, second) -> first + second), + MINUS("-", (first, second) -> first - second), + MULTIPLY("*", (first, second) -> first * second), + DIVIDE("/", (first, second) -> first / second); + + private String symbol; + private BiFunction operation; + + Operator(String symbol, BiFunction operation) { + this.symbol = symbol; + this.operation = operation; + } + + public String getSymbol(){ return symbol; } + + public int operate(int first, int second) { + return operation.apply(first, second); + } + + +} From 87102f416fcf25d84b219192e644ba20679d3b8f Mon Sep 17 00:00:00 2001 From: yslee96 <77106988+yslee96@users.noreply.github.com> Date: Wed, 1 Feb 2023 13:00:47 +0900 Subject: [PATCH 2/2] Update README.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit "설명 및 체크리스트 작성" --- README.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/README.md b/README.md index eee9de4..23dc54b 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,13 @@ +## 다이어그램 +image + +## 구현 기능 +- [X] 입력을 받았을 경우 사칙연산(+, -, *, /)이 가능해야 한다. + +- [ ] 숫자에 소수를 적용해본다. + +- [ ] 사칙연산 우선순위를 적용한다. + ## 깃허브 **[java-calculator](https://github.com/programmers-lecture/java-calculator)**