From 3ff5220f023ac301addb7dc7802fcf5b7304698c Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Wed, 23 Aug 2023 10:29:31 +0900 Subject: [PATCH 01/97] =?UTF-8?q?Feat=20:=20Input=ED=81=B4=EB=A0=88?= =?UTF-8?q?=EC=8A=A4=20=EC=B6=94=EA=B0=80=20=EB=B0=8F=20=EC=84=A0=ED=83=9D?= =?UTF-8?q?=20=EC=9E=85=EB=A0=A5=20=EB=A9=94=EC=86=8C=EB=93=9D=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/input/Input.java | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 src/main/java/input/Input.java diff --git a/src/main/java/input/Input.java b/src/main/java/input/Input.java new file mode 100644 index 0000000..d3beec9 --- /dev/null +++ b/src/main/java/input/Input.java @@ -0,0 +1,28 @@ +package input; + +import validation.SelectValidation; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; + +public class Input { + + public static int select; + + public static String expression = ""; + BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); + + static SelectValidation selectValidation = new SelectValidation(); + + + public void select() throws IOException { + System.out.println("1.조회"); + System.out.println("2.계산"); + select = Integer.parseInt(bufferedReader.readLine()); + System.out.println("선택 " + select); + + } + + +} From 3d40f9999a186778b21f54092ff40c71e15e5a24 Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Wed, 23 Aug 2023 10:30:02 +0900 Subject: [PATCH 02/97] =?UTF-8?q?Feat=20:=20Options=20Enum=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/options/Options.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 src/main/java/options/Options.java diff --git a/src/main/java/options/Options.java b/src/main/java/options/Options.java new file mode 100644 index 0000000..5d594a6 --- /dev/null +++ b/src/main/java/options/Options.java @@ -0,0 +1,17 @@ +package options; + +public enum Options { + CHECK(1), + CALCULATE(2); + + + private int value; + + Options(int value) { + this.value = value; + } + + public int getValue() { + return value; + } +} From a2d84a9597c0c06f063511bb66904cfbd5132b8a Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Wed, 23 Aug 2023 10:30:26 +0900 Subject: [PATCH 03/97] =?UTF-8?q?Feat=20:=20=EC=9E=85=EB=A0=A5=EC=97=90=20?= =?UTF-8?q?=EB=8C=80=ED=95=9C=20=EC=98=88=EC=99=B8=EC=B2=98=EB=A6=AC=20?= =?UTF-8?q?=ED=81=B4=EB=9E=98=EC=8A=A4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/validation/SelectValidation.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100644 src/main/java/validation/SelectValidation.java diff --git a/src/main/java/validation/SelectValidation.java b/src/main/java/validation/SelectValidation.java new file mode 100644 index 0000000..da4e1f8 --- /dev/null +++ b/src/main/java/validation/SelectValidation.java @@ -0,0 +1,13 @@ +package validation; + +public class SelectValidation { + + public boolean checkSelectValue(int select){ + if(select != 1 || select != 2){ + System.out.println("잘못된 입력값 입니다."); + return false; + } + return true; + } + +} From adee2c47bc3a92695e6474e706e02a4994a43f0a Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Wed, 23 Aug 2023 10:33:00 +0900 Subject: [PATCH 04/97] =?UTF-8?q?Feat=20:=20=EC=8B=9D=20=EC=9E=85=EB=A0=A5?= =?UTF-8?q?=20=EB=A9=94=EC=86=8C=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/input/Input.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/input/Input.java b/src/main/java/input/Input.java index d3beec9..390a980 100644 --- a/src/main/java/input/Input.java +++ b/src/main/java/input/Input.java @@ -24,5 +24,9 @@ public void select() throws IOException { } + public void expression() throws IOException{ + expression = bufferedReader.readLine(); + } + } From 3dace13467f0c8dd7d016addfd65117d6a946671 Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Wed, 23 Aug 2023 10:33:45 +0900 Subject: [PATCH 05/97] =?UTF-8?q?Feat=20:=20=EC=A0=80=EC=9E=A5=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=20=EC=B6=94=EA=B0=80=20=EB=B0=8F=20=EC=A0=80?= =?UTF-8?q?=EC=9E=A5=20=EB=A9=94=EC=86=8C=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/repository/Repository.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 src/main/java/repository/Repository.java diff --git a/src/main/java/repository/Repository.java b/src/main/java/repository/Repository.java new file mode 100644 index 0000000..3dea092 --- /dev/null +++ b/src/main/java/repository/Repository.java @@ -0,0 +1,14 @@ +package repository; + +import java.util.ArrayList; +import java.util.List; + +public class Repository { + + static List result = new ArrayList<>(); + + public void store(String expression){ + result.add(expression); + } + +} From 0d743bdb9e6008111b2283dd882f63d4b632f274 Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Wed, 23 Aug 2023 13:34:43 +0900 Subject: [PATCH 06/97] =?UTF-8?q?Feat=20:=20=EA=B2=B0=EA=B3=BC=20=ED=98=B8?= =?UTF-8?q?=EC=B6=9C=20=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/repository/Repository.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/repository/Repository.java b/src/main/java/repository/Repository.java index 3dea092..887a34a 100644 --- a/src/main/java/repository/Repository.java +++ b/src/main/java/repository/Repository.java @@ -11,4 +11,8 @@ public void store(String expression){ result.add(expression); } + public List getResult(){ + return result; + } + } From f1db66f39450ca5878dc9f21b5c8c448bb651c20 Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Wed, 23 Aug 2023 13:35:12 +0900 Subject: [PATCH 07/97] =?UTF-8?q?Feat=20:=20=EA=B2=B0=EA=B3=BC=20=EC=B6=9C?= =?UTF-8?q?=EB=A0=A5=20=EB=A9=94=EC=86=8C=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/inquire/Inquire.java | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100644 src/main/java/inquire/Inquire.java diff --git a/src/main/java/inquire/Inquire.java b/src/main/java/inquire/Inquire.java new file mode 100644 index 0000000..8532b13 --- /dev/null +++ b/src/main/java/inquire/Inquire.java @@ -0,0 +1,16 @@ +package inquire; + +import repository.Repository; + +import java.util.List; + +public class Inquire { + + Repository repository = new Repository(); + + public void printResult(){ + List result = repository.getResult(); + result.forEach(System.out::println); + } + +} From d6b26c04ab7bacbcb485336d1dafe10f78e1196c Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Wed, 23 Aug 2023 16:36:26 +0900 Subject: [PATCH 08/97] =?UTF-8?q?Feat=20:=20=EC=97=B0=EC=82=B0=EC=9E=90=20?= =?UTF-8?q?=EC=9A=B0=EC=84=A0=EC=88=9C=EC=9C=84=20=EC=A0=95=EC=9D=98=20?= =?UTF-8?q?=EB=A9=94=EC=86=8C=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/calculator/Calculator.java | 28 ++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 src/main/java/calculator/Calculator.java diff --git a/src/main/java/calculator/Calculator.java b/src/main/java/calculator/Calculator.java new file mode 100644 index 0000000..70cc1c1 --- /dev/null +++ b/src/main/java/calculator/Calculator.java @@ -0,0 +1,28 @@ +package calculator; + +import java.util.Stack; + +public class Calculator { + + Stack operator = new Stack(); + String postfix = ""; + + + public int operatorPriority(char operator){ + switch (operator){ + case '+': + case '-': + return 1; + case '*': + case '/': + return 2; + } + return -1; + } + + + + + + +} From 250674d011a9cefbda8a11989b5ff594f529c18e Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Wed, 23 Aug 2023 17:11:02 +0900 Subject: [PATCH 09/97] =?UTF-8?q?Feat=20:=20=EC=A4=91=EC=9C=84=20=ED=91=9C?= =?UTF-8?q?=ED=98=84=EC=8B=9D=20=ED=9B=84=EC=9C=84=ED=91=9C=ED=98=84?= =?UTF-8?q?=EC=8B=9D=EC=9C=BC=EB=A1=9C=20=EB=B3=80=EA=B2=BD=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/calculator/Calculator.java | 30 +++++++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) diff --git a/src/main/java/calculator/Calculator.java b/src/main/java/calculator/Calculator.java index 70cc1c1..5226cf4 100644 --- a/src/main/java/calculator/Calculator.java +++ b/src/main/java/calculator/Calculator.java @@ -1,11 +1,39 @@ package calculator; import java.util.Stack; +import java.util.logging.Logger; public class Calculator { - Stack operator = new Stack(); + + Stack operator = new Stack(); String postfix = ""; + String pattern = "[+\\-*/]"; + + + public String changeToPostFix(String expression){ + expression.chars().forEach(c -> { + char value = (char)c; + int operatorPriority = operatorPriority(value); + if(operatorPriority == -1){ + postfix += value; + } + else if(operator.isEmpty()){ + operator.add(value); + } + else { + while(!operator.isEmpty() && operator.peek() >= operatorPriority){ + postfix += operator.pop(); + } + operator.add(value); + } + }); + while(!operator.isEmpty()){ + postfix += operator.pop(); + } + return postfix; + } + public int operatorPriority(char operator){ From 4dfb3b9df9c074f94605d04526547ee4e2a3de8a Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Wed, 23 Aug 2023 17:11:27 +0900 Subject: [PATCH 10/97] =?UTF-8?q?Feat=20:=20=EC=A4=91=EC=9C=84=20=ED=91=9C?= =?UTF-8?q?=EA=B8=B0=EC=8B=9D=20=EB=B3=80=EA=B2=BD=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=EB=A1=9C=EC=A7=81=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/ChangToPostfixTest.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 src/test/java/ChangToPostfixTest.java diff --git a/src/test/java/ChangToPostfixTest.java b/src/test/java/ChangToPostfixTest.java new file mode 100644 index 0000000..a04dca9 --- /dev/null +++ b/src/test/java/ChangToPostfixTest.java @@ -0,0 +1,15 @@ +import calculator.Calculator; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +public class ChangToPostfixTest { + +@Test +public void PostfixTest(){ + String input = "1 + 2 * 3 "; + String expect = "1 2 + 3 *"; + Calculator calculator = new Calculator(); + String value = calculator.changeToPostFix(input); + Assertions.assertEquals(value,expect); +} +} From 7ab770bcf10dee6fc8b80e717f86f2d2c6079146 Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Fri, 25 Aug 2023 13:27:55 +0900 Subject: [PATCH 11/97] =?UTF-8?q?Fix=20:=20=EC=A4=91=EC=9C=84=20=EC=97=B0?= =?UTF-8?q?=EC=82=B0=EC=8B=9D=20=EB=B3=80=ED=99=98=20=EB=A1=9C=EC=A7=81=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/calculator/Calculator.java | 32 +++++++++++++----------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/src/main/java/calculator/Calculator.java b/src/main/java/calculator/Calculator.java index 5226cf4..21b06ab 100644 --- a/src/main/java/calculator/Calculator.java +++ b/src/main/java/calculator/Calculator.java @@ -1,31 +1,33 @@ package calculator; +import java.util.Arrays; import java.util.Stack; import java.util.logging.Logger; public class Calculator { - Stack operator = new Stack(); - String postfix = ""; String pattern = "[+\\-*/]"; - + String postfix = ""; public String changeToPostFix(String expression){ - expression.chars().forEach(c -> { - char value = (char)c; + Stack operator = new Stack(); + + String[] splitExpression = expression.split(" "); + Arrays.stream(splitExpression).forEach(str -> { + String value = str; int operatorPriority = operatorPriority(value); if(operatorPriority == -1){ - postfix += value; + postfix += value+" "; } else if(operator.isEmpty()){ - operator.add(value); + operator.add((value+" ")); } else { - while(!operator.isEmpty() && operator.peek() >= operatorPriority){ + while(!operator.isEmpty() && operatorPriority(operator.peek().substring(0,1)) >= operatorPriority){ postfix += operator.pop(); } - operator.add(value); + operator.add((value+" ")); } }); while(!operator.isEmpty()){ @@ -36,13 +38,14 @@ else if(operator.isEmpty()){ - public int operatorPriority(char operator){ + + public int operatorPriority(String operator){ switch (operator){ - case '+': - case '-': + case "+": + case "-": return 1; - case '*': - case '/': + case "*": + case "/": return 2; } return -1; @@ -53,4 +56,5 @@ public int operatorPriority(char operator){ + } From fd4830663f06ce24b9a119e53f0c7d67bd30d7a4 Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Fri, 25 Aug 2023 13:28:37 +0900 Subject: [PATCH 12/97] =?UTF-8?q?Feat=20=20:=20=ED=9B=84=EC=9C=84=20?= =?UTF-8?q?=EC=97=B0=EC=82=B0=EC=8B=9D=20=EA=B3=84=EC=82=B0=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/calculator/Calculator.java | 27 +++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/src/main/java/calculator/Calculator.java b/src/main/java/calculator/Calculator.java index 21b06ab..28dc19c 100644 --- a/src/main/java/calculator/Calculator.java +++ b/src/main/java/calculator/Calculator.java @@ -35,7 +35,32 @@ else if(operator.isEmpty()){ } return postfix; } - + public int calculator(String postfixExpression){ + Stack result = new Stack<>(); + String[] splitPostfixExpression = postfixExpression.split(" "); + Arrays.stream(splitPostfixExpression).forEach(str -> { + String value = str; + switch (value){ + case "+": + result.push(result.pop() + result.pop()); + break; + case "-": + result.push(result.pop() - result.pop()); + break; + case "*": + result.push(result.pop() * result.pop()); + break; + case "/": + result.push(result.pop() / result.pop()); + break; + case " ": + break; + default: + result.push(Integer.parseInt(value)); + } + }); + return result.pop(); + } From a79039fca1e6e71026429e85af5382b9b569a371 Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Fri, 25 Aug 2023 13:30:01 +0900 Subject: [PATCH 13/97] =?UTF-8?q?Feat=20:=20=ED=9B=84=EC=9C=84=EC=97=B0?= =?UTF-8?q?=EC=82=B0=EC=8B=9D=20=EA=B3=84=EC=82=B0=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=EC=BD=94=EB=93=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/CalculatorTest.java | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 src/test/java/CalculatorTest.java diff --git a/src/test/java/CalculatorTest.java b/src/test/java/CalculatorTest.java new file mode 100644 index 0000000..99f2a7e --- /dev/null +++ b/src/test/java/CalculatorTest.java @@ -0,0 +1,14 @@ +import calculator.Calculator; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.Test; + +public class CalculatorTest { + + +@Test +public void calculator() { + Calculator calculator = new Calculator(); + int result = calculator.calculator("3 4 5 + *"); + Assertions.assertEquals(27,result); + } +} From 164cf9a25f2ebc1de584f81c43c1cb819bcb30b3 Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Fri, 25 Aug 2023 13:30:42 +0900 Subject: [PATCH 14/97] =?UTF-8?q?Feat=20:=20=EA=B2=8C=EC=82=B0=EA=B8=B0=20?= =?UTF-8?q?=EC=8B=A4=ED=96=89=20=EB=A1=9C=EC=A7=81=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/main.java | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 src/main/java/main.java diff --git a/src/main/java/main.java b/src/main/java/main.java new file mode 100644 index 0000000..d41ef89 --- /dev/null +++ b/src/main/java/main.java @@ -0,0 +1,32 @@ +import calculator.Calculator; +import input.Input; +import inquire.Inquire; +import options.Options; +import repository.Repository; +import validation.SelectValidation; + +import java.io.IOException; + +public class main { + + + public static void main(String[] args) throws IOException { + while(true){ + Input input = new Input(); + input.select(); + if(Input.select == Options.CHECK.getValue()){ + Inquire inquire = new Inquire(); + inquire.printResult(); + } + else if(Input.select == Options.CALCULATE.getValue()){ + Repository repository = new Repository(); + Calculator calculator = new Calculator(); + String expression = input.expression(); + String postfixExpression = calculator.changeToPostFix(expression); + int result = calculator.calculator(postfixExpression); + repository.store(expression + " = " + result); + + } + } + } +} From b52819406ab503e2e0b763c842cceb1652103d9b Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Fri, 25 Aug 2023 13:41:16 +0900 Subject: [PATCH 15/97] =?UTF-8?q?test=20:=20=EC=A4=91=EC=9C=84=20=ED=91=9C?= =?UTF-8?q?=EA=B8=B0=EC=8B=9D=20->=20=ED=9B=84=EC=9C=84=ED=91=9C=EA=B8=B0?= =?UTF-8?q?=EC=8B=9D=20=EB=B3=80=ED=99=98=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/ChangToPostfixTest.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/test/java/ChangToPostfixTest.java b/src/test/java/ChangToPostfixTest.java index a04dca9..5b26db8 100644 --- a/src/test/java/ChangToPostfixTest.java +++ b/src/test/java/ChangToPostfixTest.java @@ -6,10 +6,10 @@ public class ChangToPostfixTest { @Test public void PostfixTest(){ - String input = "1 + 2 * 3 "; - String expect = "1 2 + 3 *"; + String input = "1 + 2 * 3"; + String expect = "1 2 3 * + "; Calculator calculator = new Calculator(); String value = calculator.changeToPostFix(input); - Assertions.assertEquals(value,expect); + Assertions.assertEquals(expect,value); } } From 5d05bb9969aad3e1d3e60971de450698b2c25e19 Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Fri, 25 Aug 2023 13:47:11 +0900 Subject: [PATCH 16/97] =?UTF-8?q?chore=20:=20=EC=B6=9C=EB=A0=A5=20?= =?UTF-8?q?=ED=98=95=EC=8B=9D=20=EB=B3=80=ED=99=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/input/Input.java | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/src/main/java/input/Input.java b/src/main/java/input/Input.java index 390a980..04c0632 100644 --- a/src/main/java/input/Input.java +++ b/src/main/java/input/Input.java @@ -16,17 +16,19 @@ public class Input { static SelectValidation selectValidation = new SelectValidation(); - public void select() throws IOException { + public int select() throws IOException { System.out.println("1.조회"); System.out.println("2.계산"); select = Integer.parseInt(bufferedReader.readLine()); System.out.println("선택 " + select); - + System.out.println(); + return select; } - public void expression() throws IOException{ + public String expression() throws IOException{ expression = bufferedReader.readLine(); - } + return expression; + } } From ad1ca5d6ef5e070462a55996c9100faadcd0d562 Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Fri, 25 Aug 2023 13:48:28 +0900 Subject: [PATCH 17/97] =?UTF-8?q?Refactor=20:=20=EB=A9=94=EC=9D=B8=20?= =?UTF-8?q?=EB=A9=94=EC=86=8C=EB=93=9C=20=EC=84=A0=ED=83=9D=EA=B0=92=20?= =?UTF-8?q?=EC=98=88=EC=99=B8=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/main.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/java/main.java b/src/main/java/main.java index d41ef89..3cde385 100644 --- a/src/main/java/main.java +++ b/src/main/java/main.java @@ -11,9 +11,15 @@ public class main { public static void main(String[] args) throws IOException { + + SelectValidation selectValidation = new SelectValidation(); + while(true){ Input input = new Input(); input.select(); + if(!selectValidation.checkSelectValue(Input.select)){ + continue; + } if(Input.select == Options.CHECK.getValue()){ Inquire inquire = new Inquire(); inquire.printResult(); From 5b6986c21676ca8a8efef09a84f173c3e90888b1 Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Fri, 25 Aug 2023 13:48:50 +0900 Subject: [PATCH 18/97] =?UTF-8?q?Fix=20:=20=EC=9E=85=EB=A0=A5=EA=B0=92=20?= =?UTF-8?q?=EC=98=88=EC=99=B8=EC=B2=98=EB=A6=AC=20=EB=B2=84=EA=B7=B8=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/validation/SelectValidation.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/validation/SelectValidation.java b/src/main/java/validation/SelectValidation.java index da4e1f8..0a6574d 100644 --- a/src/main/java/validation/SelectValidation.java +++ b/src/main/java/validation/SelectValidation.java @@ -3,7 +3,7 @@ public class SelectValidation { public boolean checkSelectValue(int select){ - if(select != 1 || select != 2){ + if(select != 1 && select != 2){ System.out.println("잘못된 입력값 입니다."); return false; } From 00a52a00771778f34301fadd149edc35329056d0 Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Fri, 25 Aug 2023 13:59:36 +0900 Subject: [PATCH 19/97] =?UTF-8?q?Feat=20:=20=EC=8B=9D=20=EC=9E=85=EB=A0=A5?= =?UTF-8?q?=20=EA=B2=80=EC=A6=9D=20=ED=81=B4=EB=9E=98=EC=8A=A4=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../validation/ExpressionInputValidation.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 src/main/java/validation/ExpressionInputValidation.java diff --git a/src/main/java/validation/ExpressionInputValidation.java b/src/main/java/validation/ExpressionInputValidation.java new file mode 100644 index 0000000..be696d0 --- /dev/null +++ b/src/main/java/validation/ExpressionInputValidation.java @@ -0,0 +1,15 @@ +package validation; + +public class ExpressionInputValidation { + + private final String REGEX = "^\\d+(?: \\+ \\d+| - \\d+| \\* \\d+| \\/ \\d+)*$"; + + public boolean checkExpressionValue(String expression){ + if(!REGEX.matches(expression)){ + System.out.println("잘못된 형식의 식입니다."); + return false; + } + return true; + } + +} From ecd0d2d9c953071ba318a6e6712d13e484e209ef Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Fri, 25 Aug 2023 14:32:09 +0900 Subject: [PATCH 20/97] =?UTF-8?q?chore=20:=20=EC=A7=80=EC=97=AD=20?= =?UTF-8?q?=EB=B3=80=EC=88=98=20class=20=EB=B3=80=EC=88=98=20=EB=B3=80?= =?UTF-8?q?=ED=99=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/inquire/Inquire.java | 2 +- src/main/java/main.java | 14 +++++++------- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/main/java/inquire/Inquire.java b/src/main/java/inquire/Inquire.java index 8532b13..4fb2359 100644 --- a/src/main/java/inquire/Inquire.java +++ b/src/main/java/inquire/Inquire.java @@ -6,7 +6,7 @@ public class Inquire { - Repository repository = new Repository(); + private static Repository repository = new Repository(); public void printResult(){ List result = repository.getResult(); diff --git a/src/main/java/main.java b/src/main/java/main.java index 3cde385..029c646 100644 --- a/src/main/java/main.java +++ b/src/main/java/main.java @@ -3,30 +3,30 @@ import inquire.Inquire; import options.Options; import repository.Repository; +import validation.ExpressionInputValidation; import validation.SelectValidation; import java.io.IOException; public class main { + private static SelectValidation selectValidation = new SelectValidation(); + private static Repository repository = new Repository(); + private static Calculator calculator = new Calculator(); + private static Input input = new Input(); + private static Inquire inquire = new Inquire(); - + private static ExpressionInputValidation expressionInputValidation = new ExpressionInputValidation(); public static void main(String[] args) throws IOException { - SelectValidation selectValidation = new SelectValidation(); - while(true){ - Input input = new Input(); input.select(); if(!selectValidation.checkSelectValue(Input.select)){ continue; } if(Input.select == Options.CHECK.getValue()){ - Inquire inquire = new Inquire(); inquire.printResult(); } else if(Input.select == Options.CALCULATE.getValue()){ - Repository repository = new Repository(); - Calculator calculator = new Calculator(); String expression = input.expression(); String postfixExpression = calculator.changeToPostFix(expression); int result = calculator.calculator(postfixExpression); From 7beba5cbd7791cd324a20511c7edb4cac5c8308d Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Fri, 25 Aug 2023 14:32:25 +0900 Subject: [PATCH 21/97] =?UTF-8?q?chore=20:=20=EC=82=AC=EC=9A=A9=ED=95=98?= =?UTF-8?q?=EC=A7=80=20=EC=95=8A=EB=8A=94=20=EB=B3=80=EC=88=98=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/calculator/Calculator.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/main/java/calculator/Calculator.java b/src/main/java/calculator/Calculator.java index 28dc19c..0089c75 100644 --- a/src/main/java/calculator/Calculator.java +++ b/src/main/java/calculator/Calculator.java @@ -6,9 +6,7 @@ public class Calculator { - - String pattern = "[+\\-*/]"; - String postfix = ""; + private static String postfix = ""; public String changeToPostFix(String expression){ Stack operator = new Stack(); From 7551509170b1a7b0c4dea6f2e7a55d47b5874518 Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Fri, 25 Aug 2023 15:00:53 +0900 Subject: [PATCH 22/97] =?UTF-8?q?Feat=20:=20input=20=EC=9D=B8=ED=84=B0?= =?UTF-8?q?=ED=8E=98=EC=9D=B4=EC=8A=A4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/input/Input.java | 28 ++-------------------------- 1 file changed, 2 insertions(+), 26 deletions(-) diff --git a/src/main/java/input/Input.java b/src/main/java/input/Input.java index 04c0632..cd75473 100644 --- a/src/main/java/input/Input.java +++ b/src/main/java/input/Input.java @@ -1,34 +1,10 @@ package input; -import validation.SelectValidation; - import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; -public class Input { - - public static int select; - - public static String expression = ""; - BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); - - static SelectValidation selectValidation = new SelectValidation(); - - - public int select() throws IOException { - System.out.println("1.조회"); - System.out.println("2.계산"); - select = Integer.parseInt(bufferedReader.readLine()); - System.out.println("선택 " + select); - System.out.println(); - return select; - } - - public String expression() throws IOException{ - expression = bufferedReader.readLine(); - return expression; - - } +public interface Input { + T input() throws IOException; } From 3557acc7a682164a60430d9335a484cc36ce0653 Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Fri, 25 Aug 2023 15:01:40 +0900 Subject: [PATCH 23/97] =?UTF-8?q?Fix=20:=20=EB=A9=80=ED=8B=B0=20=EC=8A=A4?= =?UTF-8?q?=EB=A0=88=EB=93=9C=20=EA=B2=BD=EC=9A=B0=20=EB=8D=B0=EC=9D=B4?= =?UTF-8?q?=ED=84=B0=20=EA=B3=B5=EC=9C=A0=EB=B0=A9=EC=A7=80=20static=20?= =?UTF-8?q?=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/repository/Repository.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/repository/Repository.java b/src/main/java/repository/Repository.java index 887a34a..df94c85 100644 --- a/src/main/java/repository/Repository.java +++ b/src/main/java/repository/Repository.java @@ -5,7 +5,7 @@ public class Repository { - static List result = new ArrayList<>(); + List result = new ArrayList<>(); public void store(String expression){ result.add(expression); From f0b3c9fad7cb89e5a611504fb19eae62bbd54c07 Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Fri, 25 Aug 2023 15:01:59 +0900 Subject: [PATCH 24/97] =?UTF-8?q?Feat=20:=20SelectInput=20class=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/input/SelectInput.java | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) create mode 100644 src/main/java/input/SelectInput.java diff --git a/src/main/java/input/SelectInput.java b/src/main/java/input/SelectInput.java new file mode 100644 index 0000000..e37a0a2 --- /dev/null +++ b/src/main/java/input/SelectInput.java @@ -0,0 +1,27 @@ +package input; + +import validation.SelectValidation; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; + +public class SelectInput implements Input{ + + int select; + BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); + + @Override + public Integer input() throws IOException{ + System.out.println("1.조회"); + System.out.println("2.계산"); + select = Integer.parseInt(bufferedReader.readLine()); + System.out.println("선택 " + select); + System.out.println(); + return select; + } + + + + +} From 527efac727ec0eacdadd16f77ae79655183f6dd1 Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Fri, 25 Aug 2023 15:02:17 +0900 Subject: [PATCH 25/97] =?UTF-8?q?Feat=20:=20=EC=8B=9D=20=EC=9E=85=EB=A0=A5?= =?UTF-8?q?=20=ED=81=B4=EB=A0=88=EC=8A=A4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/input/ExpressionInput.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 src/main/java/input/ExpressionInput.java diff --git a/src/main/java/input/ExpressionInput.java b/src/main/java/input/ExpressionInput.java new file mode 100644 index 0000000..9b48ab5 --- /dev/null +++ b/src/main/java/input/ExpressionInput.java @@ -0,0 +1,17 @@ +package input; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; + +public class ExpressionInput implements Input{ + + BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); + + @Override + public String input() throws IOException { + String expression = bufferedReader.readLine(); + return expression; + + } +} From 06ab0ee0458a63b7e9d852391cbcfebdc14a4147 Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Fri, 25 Aug 2023 16:00:50 +0900 Subject: [PATCH 26/97] =?UTF-8?q?Feat=20:=20Calculator=20=EC=9D=B8?= =?UTF-8?q?=ED=84=B0=ED=8E=98=EC=9D=B4=EC=8A=A4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/calculator/Calculator.java | 81 +----------------------- 1 file changed, 2 insertions(+), 79 deletions(-) diff --git a/src/main/java/calculator/Calculator.java b/src/main/java/calculator/Calculator.java index 0089c75..05962f2 100644 --- a/src/main/java/calculator/Calculator.java +++ b/src/main/java/calculator/Calculator.java @@ -1,83 +1,6 @@ package calculator; -import java.util.Arrays; -import java.util.Stack; -import java.util.logging.Logger; - -public class Calculator { - - private static String postfix = ""; - - public String changeToPostFix(String expression){ - Stack operator = new Stack(); - - String[] splitExpression = expression.split(" "); - Arrays.stream(splitExpression).forEach(str -> { - String value = str; - int operatorPriority = operatorPriority(value); - if(operatorPriority == -1){ - postfix += value+" "; - } - else if(operator.isEmpty()){ - operator.add((value+" ")); - } - else { - while(!operator.isEmpty() && operatorPriority(operator.peek().substring(0,1)) >= operatorPriority){ - postfix += operator.pop(); - } - operator.add((value+" ")); - } - }); - while(!operator.isEmpty()){ - postfix += operator.pop(); - } - return postfix; - } - public int calculator(String postfixExpression){ - Stack result = new Stack<>(); - String[] splitPostfixExpression = postfixExpression.split(" "); - Arrays.stream(splitPostfixExpression).forEach(str -> { - String value = str; - switch (value){ - case "+": - result.push(result.pop() + result.pop()); - break; - case "-": - result.push(result.pop() - result.pop()); - break; - case "*": - result.push(result.pop() * result.pop()); - break; - case "/": - result.push(result.pop() / result.pop()); - break; - case " ": - break; - default: - result.push(Integer.parseInt(value)); - } - }); - return result.pop(); - } - - - - public int operatorPriority(String operator){ - switch (operator){ - case "+": - case "-": - return 1; - case "*": - case "/": - return 2; - } - return -1; - } - - - - - - +public interface Calculator { + public int calculator(String calculator); } From d14b8bd6670aca4e041e2e7dfc6194d22b4333cc Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Fri, 25 Aug 2023 16:01:19 +0900 Subject: [PATCH 27/97] =?UTF-8?q?Refactor=20:=20=ED=9B=84=EC=9C=84=20?= =?UTF-8?q?=ED=91=9C=EA=B8=B0=EC=8B=9D=20=EA=B3=84=EC=82=B0=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/calculator/PostFixCalculator.java | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 src/main/java/calculator/PostFixCalculator.java diff --git a/src/main/java/calculator/PostFixCalculator.java b/src/main/java/calculator/PostFixCalculator.java new file mode 100644 index 0000000..7d9893a --- /dev/null +++ b/src/main/java/calculator/PostFixCalculator.java @@ -0,0 +1,46 @@ +package calculator; + +import java.util.Arrays; +import java.util.Stack; + +public class PostFixCalculator implements Calculator{ + + + @Override + public int calculator(String postfixExpression){ + Stack result = new Stack<>(); + String[] splitPostfixExpression = postfixExpression.split(" "); + Arrays.stream(splitPostfixExpression).forEach(str -> { + String value = str; + switch (value){ + case "+": + result.push(result.pop() + result.pop()); + break; + case "-": + result.push(result.pop() - result.pop()); + break; + case "*": + result.push(result.pop() * result.pop()); + break; + case "/": + result.push(result.pop() / result.pop()); + break; + case " ": + break; + default: + result.push(Integer.parseInt(value)); + } + }); + return result.pop(); + } + + + + + + + + + + +} From 8066eb2eec81fd221004ad21ea3eb20225f41347 Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Fri, 25 Aug 2023 16:01:38 +0900 Subject: [PATCH 28/97] =?UTF-8?q?Feat=20:=20=EC=A4=91=EC=9C=84=ED=91=9C?= =?UTF-8?q?=EA=B8=B0=EC=8B=9D=20=EA=B3=84=EC=82=B0=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/calculator/InFixCalculator.java | 57 +++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 src/main/java/calculator/InFixCalculator.java diff --git a/src/main/java/calculator/InFixCalculator.java b/src/main/java/calculator/InFixCalculator.java new file mode 100644 index 0000000..3bdf7bb --- /dev/null +++ b/src/main/java/calculator/InFixCalculator.java @@ -0,0 +1,57 @@ +package calculator; + +import java.util.Arrays; +import java.util.Stack; + +public class InFixCalculator implements Calculator{ + + private static String postfix = ""; + + + @Override + public int calculator(String inFixCalculator) { + String postFix = changeToPostFix(inFixCalculator); + PostFixCalculator postFixCalculator = new PostFixCalculator(); + int result = postFixCalculator.calculator(postFix); + return result; + } + + public String changeToPostFix(String expression){ + Stack operator = new Stack(); + + String[] splitExpression = expression.split(" "); + Arrays.stream(splitExpression).forEach(str -> { + String value = str; + int operatorPriority = operatorPriority(value); + if(operatorPriority == -1){ + postfix += value+" "; + } + else if(operator.isEmpty()){ + operator.add((value+" ")); + } + else { + while(!operator.isEmpty() && operatorPriority(operator.peek().substring(0,1)) >= operatorPriority){ + postfix += operator.pop(); + } + operator.add((value+" ")); + } + }); + while(!operator.isEmpty()){ + postfix += operator.pop(); + } + return postfix; + } + + + public int operatorPriority(String operator){ + switch (operator){ + case "+": + case "-": + return 1; + case "*": + case "/": + return 2; + } + return -1; + } +} From 1ea114180ac32c8bcc69326c5d84d5aabc19f036 Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Fri, 25 Aug 2023 16:50:30 +0900 Subject: [PATCH 29/97] =?UTF-8?q?Test=20=20:=20=EC=A4=91=EC=9C=84=20?= =?UTF-8?q?=ED=91=9C=ED=98=84=EC=8B=9D=20=EA=B3=84=EC=82=B0=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/CalculatorTest.java | 12 ++++++++++-- src/test/java/ChangToPostfixTest.java | 5 +++-- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/src/test/java/CalculatorTest.java b/src/test/java/CalculatorTest.java index 99f2a7e..c60d355 100644 --- a/src/test/java/CalculatorTest.java +++ b/src/test/java/CalculatorTest.java @@ -1,4 +1,6 @@ import calculator.Calculator; +import calculator.InFixCalculator; +import calculator.PostFixCalculator; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; @@ -6,9 +8,15 @@ public class CalculatorTest { @Test -public void calculator() { - Calculator calculator = new Calculator(); +public void PostFixCalculator() { + PostFixCalculator calculator = new PostFixCalculator(); int result = calculator.calculator("3 4 5 + *"); Assertions.assertEquals(27,result); } +@Test +public void InFixCalculator(){ + Calculator calculator = new InFixCalculator(); + int expect = calculator.calculator("3 + 2 + 5 * 2 / 1 "); + Assertions.assertEquals(15,expect); +} } diff --git a/src/test/java/ChangToPostfixTest.java b/src/test/java/ChangToPostfixTest.java index 5b26db8..09e0c74 100644 --- a/src/test/java/ChangToPostfixTest.java +++ b/src/test/java/ChangToPostfixTest.java @@ -1,4 +1,5 @@ -import calculator.Calculator; +import calculator.InFixCalculator; +import calculator.PostFixCalculator; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; @@ -8,7 +9,7 @@ public class ChangToPostfixTest { public void PostfixTest(){ String input = "1 + 2 * 3"; String expect = "1 2 3 * + "; - Calculator calculator = new Calculator(); + InFixCalculator calculator = new InFixCalculator(); String value = calculator.changeToPostFix(input); Assertions.assertEquals(expect,value); } From 90746b51a2746feab4c7c7e4c4e6de7fcaad9608 Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Fri, 25 Aug 2023 16:50:44 +0900 Subject: [PATCH 30/97] =?UTF-8?q?Fix=20:=20=ED=94=BC=EC=97=B0=EC=82=B0?= =?UTF-8?q?=EC=9E=90=20=EC=88=9C=EC=84=9C=20=EB=B2=84=EA=B7=B8=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/calculator/PostFixCalculator.java | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/main/java/calculator/PostFixCalculator.java b/src/main/java/calculator/PostFixCalculator.java index 7d9893a..132ff0d 100644 --- a/src/main/java/calculator/PostFixCalculator.java +++ b/src/main/java/calculator/PostFixCalculator.java @@ -5,7 +5,8 @@ public class PostFixCalculator implements Calculator{ - + int firstOperand; + int secondOperand; @Override public int calculator(String postfixExpression){ Stack result = new Stack<>(); @@ -14,16 +15,24 @@ public int calculator(String postfixExpression){ String value = str; switch (value){ case "+": - result.push(result.pop() + result.pop()); + firstOperand = result.pop(); + secondOperand = result.pop(); + result.push(secondOperand + firstOperand); break; case "-": - result.push(result.pop() - result.pop()); + firstOperand = result.pop(); + secondOperand = result.pop(); + result.push(secondOperand - firstOperand); break; case "*": - result.push(result.pop() * result.pop()); + firstOperand = result.pop(); + secondOperand = result.pop(); + result.push(secondOperand * firstOperand); break; case "/": - result.push(result.pop() / result.pop()); + firstOperand = result.pop(); + secondOperand = result.pop(); + result.push(secondOperand / firstOperand); break; case " ": break; From 01f207492a2fab05c278f8f2dddda28eaff7e8ca Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Fri, 25 Aug 2023 16:53:35 +0900 Subject: [PATCH 31/97] =?UTF-8?q?Refactor=20:=20=EB=B3=80=EC=88=98=20?= =?UTF-8?q?=EC=9D=B4=EB=A6=84=20=EC=88=98=EC=A0=95=20=EB=B0=8F=20=EC=8B=9D?= =?UTF-8?q?=20=EC=9E=85=EB=A0=A5=EA=B0=92=20=EC=98=88=EC=99=B8=20=EC=B2=98?= =?UTF-8?q?=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/main.java | 36 +++++++++++++++++++++++------------- 1 file changed, 23 insertions(+), 13 deletions(-) diff --git a/src/main/java/main.java b/src/main/java/main.java index 029c646..85aade1 100644 --- a/src/main/java/main.java +++ b/src/main/java/main.java @@ -1,5 +1,8 @@ import calculator.Calculator; -import input.Input; +import calculator.InFixCalculator; +import calculator.PostFixCalculator; +import input.ExpressionInput; +import input.SelectInput; import inquire.Inquire; import options.Options; import repository.Repository; @@ -10,27 +13,34 @@ public class main { private static SelectValidation selectValidation = new SelectValidation(); - private static Repository repository = new Repository(); - private static Calculator calculator = new Calculator(); - private static Input input = new Input(); - private static Inquire inquire = new Inquire(); + private static ExpressionInputValidation expressionInputValidation = new ExpressionInputValidation(); + + public static void main(String[] args) throws IOException { while(true){ - input.select(); - if(!selectValidation.checkSelectValue(Input.select)){ + SelectInput selectInput = new SelectInput(); + int select = selectInput.input(); + if(!selectValidation.checkSelectValue(select)){ continue; } - if(Input.select == Options.CHECK.getValue()){ + if(select== Options.CHECK.getValue()){ + Inquire inquire = new Inquire(); inquire.printResult(); } - else if(Input.select == Options.CALCULATE.getValue()){ - String expression = input.expression(); - String postfixExpression = calculator.changeToPostFix(expression); - int result = calculator.calculator(postfixExpression); - repository.store(expression + " = " + result); + else if(select== Options.CALCULATE.getValue()){ + ExpressionInput expressionInput = new ExpressionInput(); + String Expression = expressionInput.input(); + if(!expressionInputValidation.checkExpressionValue(Expression)){ + continue; + } + Calculator calculator = new InFixCalculator(); + int result = calculator.calculator(Expression); + Repository repository = new Repository(); + System.out.println(result); + repository.store(Expression + " = " + result); } } From 28c4398f2d169362a332ef4a20ee2d172860486a Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Fri, 25 Aug 2023 17:16:38 +0900 Subject: [PATCH 32/97] =?UTF-8?q?Chore=20:=20=EC=9E=85=EB=A0=A5=20?= =?UTF-8?q?=ED=98=95=EC=8B=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/input/SelectInput.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/input/SelectInput.java b/src/main/java/input/SelectInput.java index e37a0a2..ad9159c 100644 --- a/src/main/java/input/SelectInput.java +++ b/src/main/java/input/SelectInput.java @@ -14,9 +14,9 @@ public class SelectInput implements Input{ @Override public Integer input() throws IOException{ System.out.println("1.조회"); - System.out.println("2.계산"); + System.out.printf("2.계산 \n\n"); + System.out.print("선택: "); select = Integer.parseInt(bufferedReader.readLine()); - System.out.println("선택 " + select); System.out.println(); return select; } From da609f1c7ce128e74e06b81464cef98798465dc9 Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Fri, 25 Aug 2023 17:16:59 +0900 Subject: [PATCH 33/97] =?UTF-8?q?Fix=20:=20=EC=8B=9D=20=EC=98=88=EC=99=B8?= =?UTF-8?q?=EC=B2=98=EB=A6=AC=20=EB=B2=84=EA=B7=B8=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/validation/ExpressionInputValidation.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/validation/ExpressionInputValidation.java b/src/main/java/validation/ExpressionInputValidation.java index be696d0..9613bf6 100644 --- a/src/main/java/validation/ExpressionInputValidation.java +++ b/src/main/java/validation/ExpressionInputValidation.java @@ -5,7 +5,7 @@ public class ExpressionInputValidation { private final String REGEX = "^\\d+(?: \\+ \\d+| - \\d+| \\* \\d+| \\/ \\d+)*$"; public boolean checkExpressionValue(String expression){ - if(!REGEX.matches(expression)){ + if(!expression.matches(REGEX)){ System.out.println("잘못된 형식의 식입니다."); return false; } From 93f245ea2674d7303f5ae5ffe8e1818f341bf941 Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Fri, 25 Aug 2023 17:17:28 +0900 Subject: [PATCH 34/97] =?UTF-8?q?Style=20:=20=EC=BD=94=EB=93=9C=20?= =?UTF-8?q?=EB=B9=88=EC=B9=B8=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/calculator/PostFixCalculator.java | 10 ---------- src/main/java/inquire/Inquire.java | 2 +- 2 files changed, 1 insertion(+), 11 deletions(-) diff --git a/src/main/java/calculator/PostFixCalculator.java b/src/main/java/calculator/PostFixCalculator.java index 132ff0d..e3d3a03 100644 --- a/src/main/java/calculator/PostFixCalculator.java +++ b/src/main/java/calculator/PostFixCalculator.java @@ -42,14 +42,4 @@ public int calculator(String postfixExpression){ }); return result.pop(); } - - - - - - - - - - } diff --git a/src/main/java/inquire/Inquire.java b/src/main/java/inquire/Inquire.java index 4fb2359..8532b13 100644 --- a/src/main/java/inquire/Inquire.java +++ b/src/main/java/inquire/Inquire.java @@ -6,7 +6,7 @@ public class Inquire { - private static Repository repository = new Repository(); + Repository repository = new Repository(); public void printResult(){ List result = repository.getResult(); From 2905ce4264b3e952091aa938110d5ec29aeab8a9 Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Fri, 25 Aug 2023 17:18:42 +0900 Subject: [PATCH 35/97] =?UTF-8?q?Refactor=20:=20Main=20class=20->=20Excuti?= =?UTF-8?q?on=20=ED=81=B4=EB=9E=98=EC=8A=A4=20=EC=9D=B4=EB=8F=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/execution/Execution.java | 50 ++++++++++++++++++++++++++ src/main/java/main.java | 42 ++-------------------- 2 files changed, 52 insertions(+), 40 deletions(-) create mode 100644 src/main/java/execution/Execution.java diff --git a/src/main/java/execution/Execution.java b/src/main/java/execution/Execution.java new file mode 100644 index 0000000..fb73bda --- /dev/null +++ b/src/main/java/execution/Execution.java @@ -0,0 +1,50 @@ +package execution; + +import calculator.Calculator; +import calculator.InFixCalculator; +import input.ExpressionInput; +import input.SelectInput; +import inquire.Inquire; +import options.Options; +import repository.Repository; +import validation.ExpressionInputValidation; +import validation.SelectValidation; + +import java.io.IOException; + +public class Execution { + + private static SelectValidation selectValidation = new SelectValidation(); + + + private static ExpressionInputValidation expressionInputValidation = new ExpressionInputValidation(); + + + public static void run() throws IOException { + + while(true){ + SelectInput selectInput = new SelectInput(); + int select = selectInput.input(); + if(!selectValidation.checkSelectValue(select)){ + continue; + } + if(select== Options.CHECK.getValue()){ + Inquire inquire = new Inquire(); + inquire.printResult(); + } + else if(select== Options.CALCULATE.getValue()){ + ExpressionInput expressionInput = new ExpressionInput(); + String Expression = expressionInput.input(); + if(!expressionInputValidation.checkExpressionValue(Expression)){ + continue; + } + Calculator calculator = new InFixCalculator(); + int result = calculator.calculator(Expression); + Repository repository = new Repository(); + System.out.println(result); + repository.store(Expression + " = " + result); + + } + } + } +} diff --git a/src/main/java/main.java b/src/main/java/main.java index 85aade1..0a3b808 100644 --- a/src/main/java/main.java +++ b/src/main/java/main.java @@ -1,48 +1,10 @@ -import calculator.Calculator; -import calculator.InFixCalculator; -import calculator.PostFixCalculator; -import input.ExpressionInput; -import input.SelectInput; -import inquire.Inquire; -import options.Options; -import repository.Repository; -import validation.ExpressionInputValidation; -import validation.SelectValidation; +import execution.Execution; import java.io.IOException; public class main { - private static SelectValidation selectValidation = new SelectValidation(); - - - private static ExpressionInputValidation expressionInputValidation = new ExpressionInputValidation(); - public static void main(String[] args) throws IOException { - - while(true){ - SelectInput selectInput = new SelectInput(); - int select = selectInput.input(); - if(!selectValidation.checkSelectValue(select)){ - continue; - } - if(select== Options.CHECK.getValue()){ - Inquire inquire = new Inquire(); - inquire.printResult(); - } - else if(select== Options.CALCULATE.getValue()){ - ExpressionInput expressionInput = new ExpressionInput(); - String Expression = expressionInput.input(); - if(!expressionInputValidation.checkExpressionValue(Expression)){ - continue; - } - Calculator calculator = new InFixCalculator(); - int result = calculator.calculator(Expression); - Repository repository = new Repository(); - System.out.println(result); - repository.store(Expression + " = " + result); - - } - } + Execution.run(); } } From c9bcc79f70fce7803e93e40480d8b75a2c6b6cd7 Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Fri, 25 Aug 2023 17:20:12 +0900 Subject: [PATCH 36/97] =?UTF-8?q?Chore=20:=20gitignore,gradle=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 117 ++++++++++++++++++++++++ build.gradle | 19 ++++ gradlew | 234 ++++++++++++++++++++++++++++++++++++++++++++++++ gradlew.bat | 89 ++++++++++++++++++ settings.gradle | 2 + 5 files changed, 461 insertions(+) create mode 100644 .gitignore create mode 100644 build.gradle create mode 100644 gradlew create mode 100644 gradlew.bat create mode 100644 settings.gradle diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..052fa33 --- /dev/null +++ b/.gitignore @@ -0,0 +1,117 @@ +# Created by https://www.toptal.com/developers/gitignore/api/intellij +# Edit at https://www.toptal.com/developers/gitignore?templates=intellij + +### Intellij ### +# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider +# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 + +# User-specific stuff +.idea/**/workspace.xml +.idea/**/tasks.xml +.idea/**/usage.statistics.xml +.idea/**/dictionaries +.idea/**/shelf + +# AWS User-specific +.idea/**/aws.xml + +# Generated files +.idea/**/contentModel.xml + +# Sensitive or high-churn files +.idea/**/dataSources/ +.idea/**/dataSources.ids +.idea/**/dataSources.local.xml +.idea/**/sqlDataSources.xml +.idea/**/dynamic.xml +.idea/**/uiDesigner.xml +.idea/**/dbnavigator.xml + +# Gradle +.idea/**/gradle.xml +.idea/**/libraries + +# Gradle and Maven with auto-import +# When using Gradle or Maven with auto-import, you should exclude module files, +# since they will be recreated, and may cause churn. Uncomment if using +# auto-import. +# .idea/artifacts +# .idea/compiler.xml +# .idea/jarRepositories.xml +# .idea/modules.xml +# .idea/*.iml +# .idea/modules +# *.iml +# *.ipr + +# CMake +cmake-build-*/ + +# Mongo Explorer plugin +.idea/**/mongoSettings.xml + +# File-based project format +*.iws + +# IntelliJ +out/ + +# mpeltonen/sbt-idea plugin +.idea_modules/ + +# JIRA plugin +atlassian-ide-plugin.xml + +# Cursive Clojure plugin +.idea/replstate.xml + +# SonarLint plugin +.idea/sonarlint/ + +# Crashlytics plugin (for Android Studio and IntelliJ) +com_crashlytics_export_strings.xml +crashlytics.properties +crashlytics-build.properties +fabric.properties + +# Editor-based Rest Client +.idea/httpRequests + +# Android studio 3.1+ serialized cache file +.idea/caches/build_file_checksums.ser + +### Intellij Patch ### +# Comment Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-215987721 + +# *.iml +# modules.xml +# .idea/misc.xml +# *.ipr + +# Sonarlint plugin +# https://plugins.jetbrains.com/plugin/7973-sonarlint +.idea/**/sonarlint/ + +# SonarQube Plugin +# https://plugins.jetbrains.com/plugin/7238-sonarqube-community-plugin +.idea/**/sonarIssues.xml + +# Markdown Navigator plugin +# https://plugins.jetbrains.com/plugin/7896-markdown-navigator-enhanced +.idea/**/markdown-navigator.xml +.idea/**/markdown-navigator-enh.xml +.idea/**/markdown-navigator/ + +# Cache file creation bug +# See https://youtrack.jetbrains.com/issue/JBR-2257 +.idea/$CACHE_FILE$ + +# CodeStream plugin +# https://plugins.jetbrains.com/plugin/12206-codestream +.idea/codestream.xml + +# Azure Toolkit for IntelliJ plugin +# https://plugins.jetbrains.com/plugin/8053-azure-toolkit-for-intellij +.idea/**/azureSettings.xml + +# End of https://www.toptal.com/developers/gitignore/api/intellij \ No newline at end of file diff --git a/build.gradle b/build.gradle new file mode 100644 index 0000000..3cae2d7 --- /dev/null +++ b/build.gradle @@ -0,0 +1,19 @@ +plugins { + id 'java' +} + +group 'org.example' +version '1.0-SNAPSHOT' + +repositories { + mavenCentral() +} + +dependencies { + testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1' + testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1' +} + +test { + useJUnitPlatform() +} \ No newline at end of file diff --git a/gradlew b/gradlew new file mode 100644 index 0000000..1b6c787 --- /dev/null +++ b/gradlew @@ -0,0 +1,234 @@ +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +############################################################################## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# +############################################################################## + +# Attempt to set APP_HOME + +# Resolve links: $0 may be a link +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac +done + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit + +APP_NAME="Gradle" +APP_BASE_NAME=${0##*/} + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Use the maximum available, or set MAX_FD != -1 to use that value. +MAX_FD=maximum + +warn () { + echo "$*" +} >&2 + +die () { + echo + echo "$*" + echo + exit 1 +} >&2 + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +nonstop=false +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; +esac + +CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + + +# Determine the Java command to use to start the JVM. +if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD=$JAVA_HOME/jre/sh/java + else + JAVACMD=$JAVA_HOME/bin/java + fi + if [ ! -x "$JAVACMD" ] ; then + die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." + fi +else + JAVACMD=java + which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + +Please set the JAVA_HOME variable in your environment to match the +location of your Java installation." +fi + +# Increase the maximum file descriptors if we can. +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac +fi + +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done +fi + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. + +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" + +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + +exec "$JAVACMD" "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 0000000..107acd3 --- /dev/null +++ b/gradlew.bat @@ -0,0 +1,89 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem +@rem Gradle startup script for Windows +@rem +@rem ########################################################################## + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=. +set APP_BASE_NAME=%~n0 +set APP_HOME=%DIRNAME% + +@rem Resolve any "." and ".." in APP_HOME to make it shorter. +for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi + +@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" + +@rem Find java.exe +if defined JAVA_HOME goto findJavaFromJavaHome + +set JAVA_EXE=java.exe +%JAVA_EXE% -version >NUL 2>&1 +if "%ERRORLEVEL%" == "0" goto execute + +echo. +echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:findJavaFromJavaHome +set JAVA_HOME=%JAVA_HOME:"=% +set JAVA_EXE=%JAVA_HOME%/bin/java.exe + +if exist "%JAVA_EXE%" goto execute + +echo. +echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. + +goto fail + +:execute +@rem Setup the command line + +set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + + +@rem Execute Gradle +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +:fail +rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 +exit /b 1 + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/settings.gradle b/settings.gradle new file mode 100644 index 0000000..4b53eb3 --- /dev/null +++ b/settings.gradle @@ -0,0 +1,2 @@ +rootProject.name = 'calculator' + From f755333616e7a9642381f83a4fa8b7d5445fc1c3 Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Fri, 25 Aug 2023 17:29:16 +0900 Subject: [PATCH 37/97] =?UTF-8?q?Refactor=20:=20=EC=98=88=EC=99=B8?= =?UTF-8?q?=EC=B2=98=EB=A6=AC=20=EB=B0=A9=EC=8B=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/validation/SelectValidation.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/validation/SelectValidation.java b/src/main/java/validation/SelectValidation.java index 0a6574d..5dda7eb 100644 --- a/src/main/java/validation/SelectValidation.java +++ b/src/main/java/validation/SelectValidation.java @@ -2,8 +2,9 @@ public class SelectValidation { - public boolean checkSelectValue(int select){ - if(select != 1 && select != 2){ + private static String REGEX = "^[12]+$"; + public boolean checkSelectValue(String select){ + if(!select.matches(REGEX)){ System.out.println("잘못된 입력값 입니다."); return false; } From 4e2831c3f9cb7e32388726c5273af6c1891800ee Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Fri, 25 Aug 2023 17:29:44 +0900 Subject: [PATCH 38/97] =?UTF-8?q?Fix=20:=20=EB=AC=B8=EC=9E=90=20=EC=9E=85?= =?UTF-8?q?=EB=A0=A5=EC=8B=9C=20=EB=B2=84=EA=B7=B8=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/execution/Execution.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/main/java/execution/Execution.java b/src/main/java/execution/Execution.java index fb73bda..2d92351 100644 --- a/src/main/java/execution/Execution.java +++ b/src/main/java/execution/Execution.java @@ -24,10 +24,11 @@ public static void run() throws IOException { while(true){ SelectInput selectInput = new SelectInput(); - int select = selectInput.input(); - if(!selectValidation.checkSelectValue(select)){ + String input = selectInput.input(); + if(!selectValidation.checkSelectValue(input)){ continue; } + int select = Integer.parseInt(input); if(select== Options.CHECK.getValue()){ Inquire inquire = new Inquire(); inquire.printResult(); From eedc44c24c30577828f998f1572e8fee38b86a85 Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Fri, 25 Aug 2023 17:30:37 +0900 Subject: [PATCH 39/97] =?UTF-8?q?Refactor=20:=20=EB=A6=AC=ED=84=B4=20?= =?UTF-8?q?=ED=83=80=EC=9E=85=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/input/SelectInput.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/main/java/input/SelectInput.java b/src/main/java/input/SelectInput.java index ad9159c..9548096 100644 --- a/src/main/java/input/SelectInput.java +++ b/src/main/java/input/SelectInput.java @@ -8,15 +8,15 @@ public class SelectInput implements Input{ - int select; + String select; BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); @Override - public Integer input() throws IOException{ + public String input() throws IOException{ System.out.println("1.조회"); System.out.printf("2.계산 \n\n"); System.out.print("선택: "); - select = Integer.parseInt(bufferedReader.readLine()); + select = bufferedReader.readLine() ; System.out.println(); return select; } From 57f95cfba4f46bc4bf660a3f0d19a2926c5d2f7c Mon Sep 17 00:00:00 2001 From: xogns4909 <50618668+xogns4909@users.noreply.github.com> Date: Fri, 25 Aug 2023 17:52:01 +0900 Subject: [PATCH 40/97] Create README.md --- README.md | 73 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..1a8636c --- /dev/null +++ b/README.md @@ -0,0 +1,73 @@ +# code-review + +### 객체지향 생활원칙을 적용하기 +- 규칙 1: 한 메서드에 오직 한 단계의 들여쓰기(indent)만 한다. `도저히 안된다면 최대 2개까지` +- 규칙 2: else 예약어를 쓰지 않는다. +- 규칙 3: 모든 원시값과 문자열을 포장한다. +- 규칙 4: 한 줄에 점을 하나만 찍는다. +- 규칙 5: 줄여쓰지 않는다(축약 금지). `ex) BufferedReader br = new BufferedReader(); (X) -> BufferedReader bufferedReader = new BufferedReader(); (O)` +- 규칙 6: 모든 엔티티를 작게 유지한다. +- 규칙 7: 3개 이상의 인스턴스 변수를 가진 클래스를 쓰지 않는다. +- 규칙 8: 일급 콜렉션을 쓴다. +- 규칙 9: 게터/세터/프로퍼티를 쓰지 않는다. `필요하면 쓰기` + +### 스트림과 람다를 활용하기 +- 스트림과 람다를 사용 할 수 있는 건 스트림과 람다를 사용해서 구현하기. + +### AngularJS Commit Message Conventions 중 +### commit message 종류를 다음과 같이 구분 +- feat (feature) +- fix (bug fix) +- docs (documentation) +- style (formatting, missing semi colons, …) +- refactor +- test (when adding missing tests) +- chore (maintain) + +### gitignore 반영 +- https://gitignore.io/ 에 접속해서 필요한 부분 ignore 반영, gradle, maven, intellij, macOS, window 등등 +### 요구사항 +- 콘솔로 구현입니다.(스윙으로 구현하시는 분들 계실까봐) +- 객체지향적인 코드로 계산기 구현하기 + - [ ] 더하기 + - [ ] 빼기 + - [ ] 곱하기 + - [ ] 나누기 + - [ ] 우선순위(사칙연산) +- [ ] 테스트 코드 구현하기 +- [ ] 계산 이력을 맵으로 데이터 저장기능 만들기 + - 애플리케이션이 동작하는 동안 데이터베이스 외에 데이터를 저장할 수 있는 방법을 고안해보세요. +- (선택) 정규식 사용 +- 가능하면 단위 테스트도 작성하기. + +### 실행결과(콘솔) +``` +1. 조회 +2. 계산 + +선택 : 2 + +1 + 2 +3 + +1. 조회 +2. 계산 + +선택 : 2 + +1 + 2 * 3 +7 + +1. 조회 +2. 계산 + +선택 : 1 + +1 + 2 = 3 +1 + 2 * 3 = 7 + +선택 : 2 + +3 - 2 * 2 +-1 +``` From 804864958aaf5064cf7e4b62d94eccfa170c417c Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Mon, 28 Aug 2023 14:15:18 +0900 Subject: [PATCH 41/97] =?UTF-8?q?refactor=20:=20=ED=95=84=EC=9A=94?= =?UTF-8?q?=EC=97=86=EB=8A=94=20=EC=A1=B0=EA=B1=B4=EB=AC=B8=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/calculator/PostFixCalculator.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/main/java/calculator/PostFixCalculator.java b/src/main/java/calculator/PostFixCalculator.java index e3d3a03..276e280 100644 --- a/src/main/java/calculator/PostFixCalculator.java +++ b/src/main/java/calculator/PostFixCalculator.java @@ -34,8 +34,6 @@ public int calculator(String postfixExpression){ secondOperand = result.pop(); result.push(secondOperand / firstOperand); break; - case " ": - break; default: result.push(Integer.parseInt(value)); } From bddb95f1ff2bdfec07e1ca0ee48c667eb9cc5a50 Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Mon, 28 Aug 2023 14:15:57 +0900 Subject: [PATCH 42/97] =?UTF-8?q?Refactor=20:=20SeletValidtation=20?= =?UTF-8?q?=EC=A0=95=EA=B7=9C=EC=8B=9D=20Pattern=20=EC=9D=B4=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/validation/SelectValidation.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/java/validation/SelectValidation.java b/src/main/java/validation/SelectValidation.java index 5dda7eb..344dab8 100644 --- a/src/main/java/validation/SelectValidation.java +++ b/src/main/java/validation/SelectValidation.java @@ -1,10 +1,14 @@ package validation; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + public class SelectValidation { - private static String REGEX = "^[12]+$"; + private static final Pattern REGEX = Pattern.compile("^[12]+$"); public boolean checkSelectValue(String select){ - if(!select.matches(REGEX)){ + Matcher matcher = REGEX.matcher(select); + if (!matcher.matches()){ System.out.println("잘못된 입력값 입니다."); return false; } From fb2677d9ef9dc2a0a9eeab56b875bbcd15ff7518 Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Mon, 28 Aug 2023 14:47:23 +0900 Subject: [PATCH 43/97] =?UTF-8?q?Chore=20:=20postFix=20=20=EC=A0=95?= =?UTF-8?q?=EC=A0=81=20=EB=B3=80=EC=88=98=20=EC=9D=B8=EC=8A=A4=ED=84=B4?= =?UTF-8?q?=EC=8A=A4=EB=B3=80=EC=88=98=EB=A1=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/calculator/InFixCalculator.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/main/java/calculator/InFixCalculator.java b/src/main/java/calculator/InFixCalculator.java index 3bdf7bb..8048c76 100644 --- a/src/main/java/calculator/InFixCalculator.java +++ b/src/main/java/calculator/InFixCalculator.java @@ -5,7 +5,7 @@ public class InFixCalculator implements Calculator{ - private static String postfix = ""; + private String postfix = ""; @Override @@ -18,7 +18,6 @@ public int calculator(String inFixCalculator) { public String changeToPostFix(String expression){ Stack operator = new Stack(); - String[] splitExpression = expression.split(" "); Arrays.stream(splitExpression).forEach(str -> { String value = str; From cf0898baea749f8d86aa5bc8a6284e4be04184df Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Mon, 28 Aug 2023 14:50:53 +0900 Subject: [PATCH 44/97] =?UTF-8?q?Style=20:=20=EB=B3=80=EC=88=98=EB=AA=85?= =?UTF-8?q?=20=EC=86=8C=EB=AC=B8=EC=9E=90=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/execution/Execution.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/main/java/execution/Execution.java b/src/main/java/execution/Execution.java index 2d92351..9c3163c 100644 --- a/src/main/java/execution/Execution.java +++ b/src/main/java/execution/Execution.java @@ -35,15 +35,16 @@ public static void run() throws IOException { } else if(select== Options.CALCULATE.getValue()){ ExpressionInput expressionInput = new ExpressionInput(); - String Expression = expressionInput.input(); - if(!expressionInputValidation.checkExpressionValue(Expression)){ + String expression = expressionInput.input(); + if(!expressionInputValidation.checkExpressionValue(expression)){ continue; } Calculator calculator = new InFixCalculator(); - int result = calculator.calculator(Expression); + int result = calculator.calculator(expression); Repository repository = new Repository(); System.out.println(result); - repository.store(Expression + " = " + result); + StringBuilder stringBuilder = new StringBuilder(); + repository.store(expression + " = " + result); } } From e3049bb8475dd45c6bdfe297638f0678a8cf1212 Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Wed, 30 Aug 2023 17:34:28 +0900 Subject: [PATCH 45/97] =?UTF-8?q?Refactor:=20=EA=B8=B0=EC=A1=B4=20Input=20?= =?UTF-8?q?Interface=20class=20=EB=A1=9C=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/input/ExpressionInput.java | 17 --------------- src/main/java/input/Input.java | 14 ++++++++++-- src/main/java/input/SelectInput.java | 27 ------------------------ 3 files changed, 12 insertions(+), 46 deletions(-) delete mode 100644 src/main/java/input/ExpressionInput.java delete mode 100644 src/main/java/input/SelectInput.java diff --git a/src/main/java/input/ExpressionInput.java b/src/main/java/input/ExpressionInput.java deleted file mode 100644 index 9b48ab5..0000000 --- a/src/main/java/input/ExpressionInput.java +++ /dev/null @@ -1,17 +0,0 @@ -package input; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStreamReader; - -public class ExpressionInput implements Input{ - - BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); - - @Override - public String input() throws IOException { - String expression = bufferedReader.readLine(); - return expression; - - } -} diff --git a/src/main/java/input/Input.java b/src/main/java/input/Input.java index cd75473..9e32656 100644 --- a/src/main/java/input/Input.java +++ b/src/main/java/input/Input.java @@ -1,10 +1,20 @@ package input; + import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; -public interface Input { +public class Input { + + BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); + public String selectInput() throws IOException { + String selectInput = bufferedReader.readLine(); + return selectInput; + } - T input() throws IOException; + public String expressionInput() throws IOException { + String expressionInput = bufferedReader.readLine(); + return expressionInput; + } } diff --git a/src/main/java/input/SelectInput.java b/src/main/java/input/SelectInput.java deleted file mode 100644 index 9548096..0000000 --- a/src/main/java/input/SelectInput.java +++ /dev/null @@ -1,27 +0,0 @@ -package input; - -import validation.SelectValidation; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStreamReader; - -public class SelectInput implements Input{ - - String select; - BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); - - @Override - public String input() throws IOException{ - System.out.println("1.조회"); - System.out.printf("2.계산 \n\n"); - System.out.print("선택: "); - select = bufferedReader.readLine() ; - System.out.println(); - return select; - } - - - - -} From 7cc00b6f667c1370332c28cbe6b17c7dc9b632c1 Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Wed, 30 Aug 2023 17:39:20 +0900 Subject: [PATCH 46/97] =?UTF-8?q?Refactor=20:=20main=EC=97=90=20throws=20I?= =?UTF-8?q?OException=EC=9D=84=20=EC=82=AD=EC=A0=9C=ED=95=98=EA=B8=B0=20?= =?UTF-8?q?=EC=9C=84=ED=95=9C=20=EC=98=88=EC=99=B8=EC=B2=98=EB=A6=AC=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/execution/Execution.java | 18 +++++++----------- src/main/java/input/Input.java | 21 ++++++++++++++++----- src/main/java/main.java | 2 +- 3 files changed, 24 insertions(+), 17 deletions(-) diff --git a/src/main/java/execution/Execution.java b/src/main/java/execution/Execution.java index 9c3163c..6caf87d 100644 --- a/src/main/java/execution/Execution.java +++ b/src/main/java/execution/Execution.java @@ -2,8 +2,7 @@ import calculator.Calculator; import calculator.InFixCalculator; -import input.ExpressionInput; -import input.SelectInput; +import input.Input; import inquire.Inquire; import options.Options; import repository.Repository; @@ -19,23 +18,20 @@ public class Execution { private static ExpressionInputValidation expressionInputValidation = new ExpressionInputValidation(); - - public static void run() throws IOException { - + public static void run() { + Input input = new Input(); while(true){ - SelectInput selectInput = new SelectInput(); - String input = selectInput.input(); - if(!selectValidation.checkSelectValue(input)){ + String selectInput = input.selectInput(); + if(!selectValidation.checkSelectValue(selectInput)){ continue; } - int select = Integer.parseInt(input); + int select = Integer.parseInt(selectInput); if(select== Options.CHECK.getValue()){ Inquire inquire = new Inquire(); inquire.printResult(); } else if(select== Options.CALCULATE.getValue()){ - ExpressionInput expressionInput = new ExpressionInput(); - String expression = expressionInput.input(); + String expression = input.expressionInput(); if(!expressionInputValidation.checkExpressionValue(expression)){ continue; } diff --git a/src/main/java/input/Input.java b/src/main/java/input/Input.java index 9e32656..0e3c354 100644 --- a/src/main/java/input/Input.java +++ b/src/main/java/input/Input.java @@ -8,13 +8,24 @@ public class Input { BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); - public String selectInput() throws IOException { - String selectInput = bufferedReader.readLine(); + public String selectInput() { + String selectInput = ""; + try { + selectInput = bufferedReader.readLine(); + } + catch (IOException e) { + selectInput = ""; + } return selectInput; } - public String expressionInput() throws IOException { - String expressionInput = bufferedReader.readLine(); - return expressionInput; + public String expressionInput(){ + String expressionInput = ""; + try { + expressionInput = bufferedReader.readLine(); + } catch (IOException e) { + expressionInput = ""; + } + return expressionInput; } } diff --git a/src/main/java/main.java b/src/main/java/main.java index 0a3b808..b6348d3 100644 --- a/src/main/java/main.java +++ b/src/main/java/main.java @@ -4,7 +4,7 @@ public class main { - public static void main(String[] args) throws IOException { + public static void main(String[] args) { Execution.run(); } } From 0b70d47efd342b3b53ea731c09fc6a2f5fb57a44 Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Thu, 31 Aug 2023 23:04:58 +0900 Subject: [PATCH 47/97] =?UTF-8?q?Feat=20:=20Input=20Interface=20=EC=83=9D?= =?UTF-8?q?=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/inputView/ConsoleInputView.java | 15 +++++++++++++++ src/main/java/inputView/InputView.java | 5 +++++ 2 files changed, 20 insertions(+) create mode 100644 src/main/java/inputView/ConsoleInputView.java create mode 100644 src/main/java/inputView/InputView.java diff --git a/src/main/java/inputView/ConsoleInputView.java b/src/main/java/inputView/ConsoleInputView.java new file mode 100644 index 0000000..6c708b5 --- /dev/null +++ b/src/main/java/inputView/ConsoleInputView.java @@ -0,0 +1,15 @@ +package inputView; + +import input.Input; + +public class ConsoleInputView implements InputView { + + @Override + public void displayOptions() { + System.out.println("1.조회"); + System.out.println("2.계산"); + System.out.println(); + System.out.print("선택 : "); + } + +} diff --git a/src/main/java/inputView/InputView.java b/src/main/java/inputView/InputView.java new file mode 100644 index 0000000..79e591d --- /dev/null +++ b/src/main/java/inputView/InputView.java @@ -0,0 +1,5 @@ +package inputView; + +public interface InputView { + void displayOptions(); +} From f7565d36d11ab994888c978016b0574a92ad1b36 Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Thu, 31 Aug 2023 23:13:40 +0900 Subject: [PATCH 48/97] =?UTF-8?q?Refactor=20:=20Pattern=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=EB=A5=BC=20=EC=9D=B4=EC=9A=A9=ED=95=9C=20?= =?UTF-8?q?=EC=A0=95=EA=B7=9C=EC=8B=9D=20=EA=B2=80=EC=A6=9D=EC=9C=BC?= =?UTF-8?q?=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/validation/ExpressionInputValidation.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/main/java/validation/ExpressionInputValidation.java b/src/main/java/validation/ExpressionInputValidation.java index 9613bf6..e28cd2f 100644 --- a/src/main/java/validation/ExpressionInputValidation.java +++ b/src/main/java/validation/ExpressionInputValidation.java @@ -1,11 +1,15 @@ package validation; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + public class ExpressionInputValidation { - private final String REGEX = "^\\d+(?: \\+ \\d+| - \\d+| \\* \\d+| \\/ \\d+)*$"; + private final Pattern REGEX = Pattern.compile("^\\d+(?: \\+ \\d+| - \\d+| \\* \\d+| \\/ \\d+)*$"); public boolean checkExpressionValue(String expression){ - if(!expression.matches(REGEX)){ + Matcher matcher = REGEX.matcher(expression); + if(!matcher.matches()){ System.out.println("잘못된 형식의 식입니다."); return false; } From a26b217108c350c4b953e5390f347a4bbe7e638d Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Thu, 31 Aug 2023 23:48:57 +0900 Subject: [PATCH 49/97] =?UTF-8?q?Refactor=20:=20=EC=83=81=EC=88=98?= =?UTF-8?q?=EB=A5=BC=20=EC=82=AC=EC=9A=A9=ED=95=9C=20=EB=A7=A4=EC=A7=81?= =?UTF-8?q?=EB=84=98=EB=B2=84=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/calculator/PostFixCalculator.java | 22 +++++++++++-------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/src/main/java/calculator/PostFixCalculator.java b/src/main/java/calculator/PostFixCalculator.java index 276e280..a9d28ae 100644 --- a/src/main/java/calculator/PostFixCalculator.java +++ b/src/main/java/calculator/PostFixCalculator.java @@ -4,32 +4,36 @@ import java.util.Stack; public class PostFixCalculator implements Calculator{ - + private final String PLUS = "+"; + private final String MINIS = "-"; + private final String MULTIPLY = "*"; + private final String DIVIDE = "/"; int firstOperand; int secondOperand; @Override public int calculator(String postfixExpression){ Stack result = new Stack<>(); String[] splitPostfixExpression = postfixExpression.split(" "); - Arrays.stream(splitPostfixExpression).forEach(str -> { + for (String str : splitPostfixExpression) { String value = str; - switch (value){ - case "+": + Operator.DIVIDE.getValue(); + switch (value) { + case PLUS: firstOperand = result.pop(); secondOperand = result.pop(); result.push(secondOperand + firstOperand); break; - case "-": + case MINIS: firstOperand = result.pop(); secondOperand = result.pop(); result.push(secondOperand - firstOperand); break; - case "*": + case MULTIPLY: firstOperand = result.pop(); secondOperand = result.pop(); result.push(secondOperand * firstOperand); break; - case "/": + case DIVIDE: firstOperand = result.pop(); secondOperand = result.pop(); result.push(secondOperand / firstOperand); @@ -37,7 +41,7 @@ public int calculator(String postfixExpression){ default: result.push(Integer.parseInt(value)); } - }); - return result.pop(); + } + return result.pop(); } } From 58a2f0697274498397923c63cbf5056d63f8cd7d Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Fri, 1 Sep 2023 12:06:29 +0900 Subject: [PATCH 50/97] =?UTF-8?q?Refactor=20:=20=EC=A0=91=EA=B7=BC=20?= =?UTF-8?q?=EC=A0=9C=EC=96=B4=EC=9E=90=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/inquire/Inquire.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/inquire/Inquire.java b/src/main/java/inquire/Inquire.java index 8532b13..23a8329 100644 --- a/src/main/java/inquire/Inquire.java +++ b/src/main/java/inquire/Inquire.java @@ -6,7 +6,7 @@ public class Inquire { - Repository repository = new Repository(); + private Repository repository = new Repository(); public void printResult(){ List result = repository.getResult(); From 0e4b06cefa535eaef64ddf3a6850dbbc57a9ce91 Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Fri, 1 Sep 2023 12:07:26 +0900 Subject: [PATCH 51/97] =?UTF-8?q?Style=20:=20=ED=81=B4=EB=9E=98=EC=8A=A4?= =?UTF-8?q?=EB=AA=85=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/{inquire/Inquire.java => output/Output.java} | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) rename src/main/java/{inquire/Inquire.java => output/Output.java} (86%) diff --git a/src/main/java/inquire/Inquire.java b/src/main/java/output/Output.java similarity index 86% rename from src/main/java/inquire/Inquire.java rename to src/main/java/output/Output.java index 23a8329..e1904c3 100644 --- a/src/main/java/inquire/Inquire.java +++ b/src/main/java/output/Output.java @@ -1,10 +1,10 @@ -package inquire; +package output; import repository.Repository; import java.util.List; -public class Inquire { +public class Output { private Repository repository = new Repository(); From 71928f3cf2b0a241d5632f818d591eb0f26a7ac9 Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Fri, 1 Sep 2023 12:44:07 +0900 Subject: [PATCH 52/97] =?UTF-8?q?Feat=20:=20OutPut=20Interface=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/output/ConsoleOutput.java | 17 +++++++++++++++++ src/main/java/output/Output.java | 14 +++----------- 2 files changed, 20 insertions(+), 11 deletions(-) create mode 100644 src/main/java/output/ConsoleOutput.java diff --git a/src/main/java/output/ConsoleOutput.java b/src/main/java/output/ConsoleOutput.java new file mode 100644 index 0000000..1669309 --- /dev/null +++ b/src/main/java/output/ConsoleOutput.java @@ -0,0 +1,17 @@ +package output; + +import repository.Repository; + +import java.util.List; + +public class ConsoleOutput implements Output { + + + public void printOperationResult(){ + List result = repository.getResult(); + result.forEach(System.out::println); + } + + + +} diff --git a/src/main/java/output/Output.java b/src/main/java/output/Output.java index e1904c3..5c4ab73 100644 --- a/src/main/java/output/Output.java +++ b/src/main/java/output/Output.java @@ -2,15 +2,7 @@ import repository.Repository; -import java.util.List; - -public class Output { - - private Repository repository = new Repository(); - - public void printResult(){ - List result = repository.getResult(); - result.forEach(System.out::println); - } - +public interface Output { + public Repository repository = new Repository(); + public void printOperationResult(); } From 0b728d316e05f04b841a5f1285d8b333d5714762 Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Fri, 1 Sep 2023 13:01:02 +0900 Subject: [PATCH 53/97] =?UTF-8?q?Feat=20:=20print=20=EB=A9=94=EC=86=8C?= =?UTF-8?q?=EB=93=9C=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/output/ConsoleOutput.java | 6 +++++- src/main/java/output/Output.java | 4 ++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/main/java/output/ConsoleOutput.java b/src/main/java/output/ConsoleOutput.java index 1669309..20dd18d 100644 --- a/src/main/java/output/ConsoleOutput.java +++ b/src/main/java/output/ConsoleOutput.java @@ -6,12 +6,16 @@ public class ConsoleOutput implements Output { - + @Override public void printOperationResult(){ List result = repository.getResult(); result.forEach(System.out::println); } + @Override + public void print(String msg) { + + } } diff --git a/src/main/java/output/Output.java b/src/main/java/output/Output.java index 5c4ab73..69c8499 100644 --- a/src/main/java/output/Output.java +++ b/src/main/java/output/Output.java @@ -5,4 +5,8 @@ public interface Output { public Repository repository = new Repository(); public void printOperationResult(); + + public void print(String msg); + + } From 2410415019c142552844f956860446bcfef45fbe Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Fri, 1 Sep 2023 13:01:26 +0900 Subject: [PATCH 54/97] =?UTF-8?q?Refactor=20:=20Output=20=EC=9D=84=20?= =?UTF-8?q?=EC=9D=B4=EC=9A=A9=ED=95=9C=20=EC=B6=9C=EB=A0=A5=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=EC=9C=BC=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/validation/ExpressionInputValidation.java | 6 +++++- src/main/java/validation/SelectValidation.java | 8 ++++++-- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/src/main/java/validation/ExpressionInputValidation.java b/src/main/java/validation/ExpressionInputValidation.java index e28cd2f..f03c63d 100644 --- a/src/main/java/validation/ExpressionInputValidation.java +++ b/src/main/java/validation/ExpressionInputValidation.java @@ -1,16 +1,20 @@ package validation; +import output.ConsoleOutput; +import output.Output; + import java.util.regex.Matcher; import java.util.regex.Pattern; public class ExpressionInputValidation { + private final Output output = new ConsoleOutput(); private final Pattern REGEX = Pattern.compile("^\\d+(?: \\+ \\d+| - \\d+| \\* \\d+| \\/ \\d+)*$"); public boolean checkExpressionValue(String expression){ Matcher matcher = REGEX.matcher(expression); if(!matcher.matches()){ - System.out.println("잘못된 형식의 식입니다."); + output.print("잘못된 형식의 식입니다."); return false; } return true; diff --git a/src/main/java/validation/SelectValidation.java b/src/main/java/validation/SelectValidation.java index 344dab8..5099420 100644 --- a/src/main/java/validation/SelectValidation.java +++ b/src/main/java/validation/SelectValidation.java @@ -1,15 +1,19 @@ package validation; +import output.ConsoleOutput; +import output.Output; + import java.util.regex.Matcher; import java.util.regex.Pattern; public class SelectValidation { - private static final Pattern REGEX = Pattern.compile("^[12]+$"); + private final Output output = new ConsoleOutput(); + private final Pattern REGEX = Pattern.compile("^[12]+$"); public boolean checkSelectValue(String select){ Matcher matcher = REGEX.matcher(select); if (!matcher.matches()){ - System.out.println("잘못된 입력값 입니다."); + output.print("잘못된 입력값 입니다."); return false; } return true; From 2256b3e6dae220460709eed1901b8cd4f486bf79 Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Fri, 1 Sep 2023 13:20:47 +0900 Subject: [PATCH 55/97] =?UTF-8?q?Refactor=20:=20Repositorty=20=EC=BB=AC?= =?UTF-8?q?=EB=A0=89=EC=85=98=20LinkedHashMap=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/repository/Repository.java | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/src/main/java/repository/Repository.java b/src/main/java/repository/Repository.java index df94c85..57fa32e 100644 --- a/src/main/java/repository/Repository.java +++ b/src/main/java/repository/Repository.java @@ -1,18 +1,19 @@ package repository; -import java.util.ArrayList; +import java.util.LinkedHashMap; import java.util.List; public class Repository { - List result = new ArrayList<>(); + LinkedHashMap map = new LinkedHashMap<>(); + + public void store(String expression,String result){ + map.put(expression,result); - public void store(String expression){ - result.add(expression); } - public List getResult(){ - return result; + public LinkedHashMap getResult(){ + return map; } } From a157b8b4fed511122afd53a37da398125111e38e Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Fri, 1 Sep 2023 13:21:18 +0900 Subject: [PATCH 56/97] =?UTF-8?q?Fix=20:=20=EC=A1=B0=ED=9A=8C=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/output/ConsoleOutput.java | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/src/main/java/output/ConsoleOutput.java b/src/main/java/output/ConsoleOutput.java index 20dd18d..9bb6713 100644 --- a/src/main/java/output/ConsoleOutput.java +++ b/src/main/java/output/ConsoleOutput.java @@ -2,19 +2,27 @@ import repository.Repository; +import java.util.LinkedHashMap; import java.util.List; +import java.util.Map; public class ConsoleOutput implements Output { @Override - public void printOperationResult(){ - List result = repository.getResult(); - result.forEach(System.out::println); + public void printOperationResult() { + LinkedHashMap result = repository.getResult(); + StringBuilder stringBuilder = new StringBuilder(); + for (Map.Entry entry : result.entrySet()) { + String key = entry.getKey(); + String value = entry.getValue(); + stringBuilder.append(key).append(" = ").append(value).append("\n"); + } + System.out.println(stringBuilder); } @Override public void print(String msg) { - + System.out.println(msg); } From 74c71727669a85a56e3399f32e1c2a4c43f3a73b Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Fri, 1 Sep 2023 14:02:01 +0900 Subject: [PATCH 57/97] =?UTF-8?q?Fix=20:=20=EC=A0=91=EA=B7=BC=EC=A7=80?= =?UTF-8?q?=EC=A0=95=EC=9E=90=20=EC=B6=94=EA=B0=80=20=EB=B0=8F=20static=20?= =?UTF-8?q?=EC=A7=80=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/repository/Repository.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/repository/Repository.java b/src/main/java/repository/Repository.java index 57fa32e..7035f20 100644 --- a/src/main/java/repository/Repository.java +++ b/src/main/java/repository/Repository.java @@ -5,7 +5,7 @@ public class Repository { - LinkedHashMap map = new LinkedHashMap<>(); + private static LinkedHashMap map = new LinkedHashMap<>(); public void store(String expression,String result){ map.put(expression,result); From 53e1a08f07bad4eea749b975191be36dbc641446 Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Fri, 1 Sep 2023 14:03:48 +0900 Subject: [PATCH 58/97] =?UTF-8?q?Chore=20:=20if=20=EB=AC=B8=20swtich=20?= =?UTF-8?q?=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/execution/Execution.java | 47 +++++++++++++++----------- 1 file changed, 27 insertions(+), 20 deletions(-) diff --git a/src/main/java/execution/Execution.java b/src/main/java/execution/Execution.java index 6caf87d..fffba1a 100644 --- a/src/main/java/execution/Execution.java +++ b/src/main/java/execution/Execution.java @@ -3,45 +3,52 @@ import calculator.Calculator; import calculator.InFixCalculator; import input.Input; -import inquire.Inquire; +import inputView.ConsoleInputView; +import inputView.InputView; +import output.ConsoleOutput; import options.Options; +import output.Output; import repository.Repository; import validation.ExpressionInputValidation; import validation.SelectValidation; -import java.io.IOException; public class Execution { + private static final int CHECK = 1; + private static final int CALCULATE = 2; private static SelectValidation selectValidation = new SelectValidation(); + private static InputView inputView = new ConsoleInputView(); private static ExpressionInputValidation expressionInputValidation = new ExpressionInputValidation(); + private static Output output = new ConsoleOutput(); + public static void run() { Input input = new Input(); - while(true){ + while(true) { + inputView.displayOptions(); String selectInput = input.selectInput(); - if(!selectValidation.checkSelectValue(selectInput)){ + if (!selectValidation.checkSelectValue(selectInput)) { continue; } int select = Integer.parseInt(selectInput); - if(select== Options.CHECK.getValue()){ - Inquire inquire = new Inquire(); - inquire.printResult(); - } - else if(select== Options.CALCULATE.getValue()){ - String expression = input.expressionInput(); - if(!expressionInputValidation.checkExpressionValue(expression)){ - continue; - } - Calculator calculator = new InFixCalculator(); - int result = calculator.calculator(expression); - Repository repository = new Repository(); - System.out.println(result); - StringBuilder stringBuilder = new StringBuilder(); - repository.store(expression + " = " + result); - + switch (select) { + case CHECK: + output.printOperationResult(); + break; + + case CALCULATE: + String expression = input.expressionInput(); + if (!expressionInputValidation.checkExpressionValue(expression)) { + continue; + } + Calculator calculator = new InFixCalculator(); + String result = Integer.toString(calculator.calculator(expression)); + Repository repository = new Repository(); + output.print(result); + repository.store(expression, result); } } } From b7cb3abe4573b96e612cac89a93d7111a45bd6ea Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Fri, 1 Sep 2023 15:43:37 +0900 Subject: [PATCH 59/97] =?UTF-8?q?Chore=20:=20=EB=A9=94=EC=86=8C=EB=93=9C?= =?UTF-8?q?=EB=AA=85=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/calculator/Calculator.java | 2 +- src/main/java/calculator/InFixCalculator.java | 4 ++-- .../java/calculator/PostFixCalculator.java | 2 +- src/test/java/CalculatorTest.java | 23 ++++++++++--------- 4 files changed, 16 insertions(+), 15 deletions(-) diff --git a/src/main/java/calculator/Calculator.java b/src/main/java/calculator/Calculator.java index 05962f2..8ebddfe 100644 --- a/src/main/java/calculator/Calculator.java +++ b/src/main/java/calculator/Calculator.java @@ -2,5 +2,5 @@ public interface Calculator { - public int calculator(String calculator); + public int calculate(String calculator); } diff --git a/src/main/java/calculator/InFixCalculator.java b/src/main/java/calculator/InFixCalculator.java index 8048c76..52ca9ef 100644 --- a/src/main/java/calculator/InFixCalculator.java +++ b/src/main/java/calculator/InFixCalculator.java @@ -9,10 +9,10 @@ public class InFixCalculator implements Calculator{ @Override - public int calculator(String inFixCalculator) { + public int calculate(String inFixCalculator) { String postFix = changeToPostFix(inFixCalculator); PostFixCalculator postFixCalculator = new PostFixCalculator(); - int result = postFixCalculator.calculator(postFix); + int result = postFixCalculator.calculate(postFix); return result; } diff --git a/src/main/java/calculator/PostFixCalculator.java b/src/main/java/calculator/PostFixCalculator.java index a9d28ae..f6bdcc8 100644 --- a/src/main/java/calculator/PostFixCalculator.java +++ b/src/main/java/calculator/PostFixCalculator.java @@ -11,7 +11,7 @@ public class PostFixCalculator implements Calculator{ int firstOperand; int secondOperand; @Override - public int calculator(String postfixExpression){ + public int calculate(String postfixExpression){ Stack result = new Stack<>(); String[] splitPostfixExpression = postfixExpression.split(" "); for (String str : splitPostfixExpression) { diff --git a/src/test/java/CalculatorTest.java b/src/test/java/CalculatorTest.java index c60d355..ec5f5d1 100644 --- a/src/test/java/CalculatorTest.java +++ b/src/test/java/CalculatorTest.java @@ -7,16 +7,17 @@ public class CalculatorTest { -@Test -public void PostFixCalculator() { - PostFixCalculator calculator = new PostFixCalculator(); - int result = calculator.calculator("3 4 5 + *"); - Assertions.assertEquals(27,result); + @Test + public void PostFixCalculator() { + PostFixCalculator calculator = new PostFixCalculator(); + int result = calculator.calculate("3 4 5 + *"); + Assertions.assertEquals(27,result); + } + + @Test + public void InFixCalculator(){ + Calculator calculator = new InFixCalculator(); + int expect = calculator.calculate("3 + 2 + 5 * 2 / 1 "); + Assertions.assertEquals(15,expect); } -@Test -public void InFixCalculator(){ - Calculator calculator = new InFixCalculator(); - int expect = calculator.calculator("3 + 2 + 5 * 2 / 1 "); - Assertions.assertEquals(15,expect); -} } From 5dc13a4122e17765dcf59f5a55a69c2fcacfbf49 Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Fri, 1 Sep 2023 16:06:47 +0900 Subject: [PATCH 60/97] =?UTF-8?q?Refactor=20:=20=EB=AA=A8=EB=93=88?= =?UTF-8?q?=ED=99=94=EB=A5=BC=20=ED=86=B5=ED=95=9C=20depth=202=20=EB=AC=B8?= =?UTF-8?q?=EC=A0=9C=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/execution/Execution.java | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/src/main/java/execution/Execution.java b/src/main/java/execution/Execution.java index fffba1a..5ad08fd 100644 --- a/src/main/java/execution/Execution.java +++ b/src/main/java/execution/Execution.java @@ -40,16 +40,20 @@ public static void run() { break; case CALCULATE: - String expression = input.expressionInput(); - if (!expressionInputValidation.checkExpressionValue(expression)) { - continue; - } - Calculator calculator = new InFixCalculator(); - String result = Integer.toString(calculator.calculator(expression)); - Repository repository = new Repository(); - output.print(result); - repository.store(expression, result); + compute(input); } } } + + private static void compute(Input input) { + String expression = input.expressionInput(); + if (!expressionInputValidation.checkExpressionValue(expression)) { + return; + } + Calculator calculator = new InFixCalculator(); + String result = Integer.toString(calculator.calculate(expression)); + Repository repository = new Repository(); + output.print(result); + repository.store(expression, result); + } } From 503e5945bf70f8cb9e3898e7f595d18a6e6b9664 Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Fri, 1 Sep 2023 16:25:43 +0900 Subject: [PATCH 61/97] =?UTF-8?q?Chore=20:=20=ED=81=B4=EB=9E=98=EC=8A=A4?= =?UTF-8?q?=EB=AA=85=20Calculator=20->=20Accmulator=20=EB=A1=9C=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/accumulator/Accumulator.java | 6 ++++++ .../InFixAccumulator.java} | 6 +++--- .../PostFixAccumulator.java} | 18 ++++++++---------- src/test/java/CalculatorTest.java | 10 +++++----- 4 files changed, 22 insertions(+), 18 deletions(-) create mode 100644 src/main/java/accumulator/Accumulator.java rename src/main/java/{calculator/InFixCalculator.java => accumulator/InFixAccumulator.java} (90%) rename src/main/java/{calculator/PostFixCalculator.java => accumulator/PostFixAccumulator.java} (79%) diff --git a/src/main/java/accumulator/Accumulator.java b/src/main/java/accumulator/Accumulator.java new file mode 100644 index 0000000..800ca56 --- /dev/null +++ b/src/main/java/accumulator/Accumulator.java @@ -0,0 +1,6 @@ +package accumulator; + +public interface Accumulator { + + public int calculate(String calculator); +} diff --git a/src/main/java/calculator/InFixCalculator.java b/src/main/java/accumulator/InFixAccumulator.java similarity index 90% rename from src/main/java/calculator/InFixCalculator.java rename to src/main/java/accumulator/InFixAccumulator.java index 52ca9ef..99196d1 100644 --- a/src/main/java/calculator/InFixCalculator.java +++ b/src/main/java/accumulator/InFixAccumulator.java @@ -1,9 +1,9 @@ -package calculator; +package accumulator; import java.util.Arrays; import java.util.Stack; -public class InFixCalculator implements Calculator{ +public class InFixAccumulator implements Accumulator { private String postfix = ""; @@ -11,7 +11,7 @@ public class InFixCalculator implements Calculator{ @Override public int calculate(String inFixCalculator) { String postFix = changeToPostFix(inFixCalculator); - PostFixCalculator postFixCalculator = new PostFixCalculator(); + PostFixAccumulator postFixCalculator = new PostFixAccumulator(); int result = postFixCalculator.calculate(postFix); return result; } diff --git a/src/main/java/calculator/PostFixCalculator.java b/src/main/java/accumulator/PostFixAccumulator.java similarity index 79% rename from src/main/java/calculator/PostFixCalculator.java rename to src/main/java/accumulator/PostFixAccumulator.java index f6bdcc8..81455c9 100644 --- a/src/main/java/calculator/PostFixCalculator.java +++ b/src/main/java/accumulator/PostFixAccumulator.java @@ -1,22 +1,20 @@ -package calculator; +package accumulator; -import java.util.Arrays; import java.util.Stack; -public class PostFixCalculator implements Calculator{ - private final String PLUS = "+"; - private final String MINIS = "-"; - private final String MULTIPLY = "*"; - private final String DIVIDE = "/"; - int firstOperand; - int secondOperand; +public class PostFixAccumulator implements Accumulator { + private static final String PLUS = "+"; + private static final String MINIS = "-"; + private static final String MULTIPLY = "*"; + private static final String DIVIDE = "/"; + private int firstOperand; + private int secondOperand; @Override public int calculate(String postfixExpression){ Stack result = new Stack<>(); String[] splitPostfixExpression = postfixExpression.split(" "); for (String str : splitPostfixExpression) { String value = str; - Operator.DIVIDE.getValue(); switch (value) { case PLUS: firstOperand = result.pop(); diff --git a/src/test/java/CalculatorTest.java b/src/test/java/CalculatorTest.java index ec5f5d1..f31a5f6 100644 --- a/src/test/java/CalculatorTest.java +++ b/src/test/java/CalculatorTest.java @@ -1,6 +1,6 @@ -import calculator.Calculator; -import calculator.InFixCalculator; -import calculator.PostFixCalculator; +import accumulator.Accumulator; +import accumulator.InFixAccumulator; +import accumulator.PostFixAccumulator; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; @@ -9,14 +9,14 @@ public class CalculatorTest { @Test public void PostFixCalculator() { - PostFixCalculator calculator = new PostFixCalculator(); + PostFixAccumulator calculator = new PostFixAccumulator(); int result = calculator.calculate("3 4 5 + *"); Assertions.assertEquals(27,result); } @Test public void InFixCalculator(){ - Calculator calculator = new InFixCalculator(); + Accumulator calculator = new InFixAccumulator(); int expect = calculator.calculate("3 + 2 + 5 * 2 / 1 "); Assertions.assertEquals(15,expect); } From 1c279804892e161742f281c381e29d013cfb44de Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Fri, 1 Sep 2023 16:26:26 +0900 Subject: [PATCH 62/97] =?UTF-8?q?Chore=20:=20Excution=20=ED=81=B4=EB=9E=98?= =?UTF-8?q?=EC=8A=A4=EB=AA=85=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/calculator/Calculator.java | 57 +++++++++++++++++++++++- src/main/java/main.java | 6 +-- src/test/java/ChangToPostfixTest.java | 5 +-- 3 files changed, 59 insertions(+), 9 deletions(-) diff --git a/src/main/java/calculator/Calculator.java b/src/main/java/calculator/Calculator.java index 8ebddfe..e51ac0e 100644 --- a/src/main/java/calculator/Calculator.java +++ b/src/main/java/calculator/Calculator.java @@ -1,6 +1,59 @@ package calculator; -public interface Calculator { +import accumulator.Accumulator; +import accumulator.InFixAccumulator; +import input.Input; +import inputView.ConsoleInputView; +import inputView.InputView; +import output.ConsoleOutput; +import output.Output; +import repository.Repository; +import validation.ExpressionInputValidation; +import validation.SelectValidation; - public int calculate(String calculator); + +public class Calculator { + + private static final int CHECK = 1; + private static final int CALCULATE = 2; + private static SelectValidation selectValidation = new SelectValidation(); + + private static InputView inputView = new ConsoleInputView(); + + private static ExpressionInputValidation expressionInputValidation = new ExpressionInputValidation(); + + private static Output output = new ConsoleOutput(); + + public static void run() { + Input input = new Input(); + while(true) { + inputView.displayOptions(); + String selectInput = input.selectInput(); + if (!selectValidation.checkSelectValue(selectInput)) { + continue; + } + int select = Integer.parseInt(selectInput); + switch (select) { + case CHECK: + output.printOperationResult(); + break; + + case CALCULATE: + compute(input); + break; + } + } + } + + private static void compute(Input input) { + String expression = input.expressionInput(); + if (!expressionInputValidation.checkExpressionValue(expression)) { + return; + } + Accumulator calculator = new InFixAccumulator(); + String result = Integer.toString(calculator.calculate(expression)); + Repository repository = new Repository(); + output.print(result); + repository.store(expression, result); + } } diff --git a/src/main/java/main.java b/src/main/java/main.java index b6348d3..9d146c1 100644 --- a/src/main/java/main.java +++ b/src/main/java/main.java @@ -1,10 +1,8 @@ -import execution.Execution; - -import java.io.IOException; +import calculator.Calculator; public class main { public static void main(String[] args) { - Execution.run(); + Calculator.run(); } } diff --git a/src/test/java/ChangToPostfixTest.java b/src/test/java/ChangToPostfixTest.java index 09e0c74..da9f05a 100644 --- a/src/test/java/ChangToPostfixTest.java +++ b/src/test/java/ChangToPostfixTest.java @@ -1,5 +1,4 @@ -import calculator.InFixCalculator; -import calculator.PostFixCalculator; +import accumulator.InFixAccumulator; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; @@ -9,7 +8,7 @@ public class ChangToPostfixTest { public void PostfixTest(){ String input = "1 + 2 * 3"; String expect = "1 2 3 * + "; - InFixCalculator calculator = new InFixCalculator(); + InFixAccumulator calculator = new InFixAccumulator(); String value = calculator.changeToPostFix(input); Assertions.assertEquals(expect,value); } From 05b3b99c447a9dc3eca1af4ed40c6e743aefd6c2 Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Fri, 1 Sep 2023 16:54:55 +0900 Subject: [PATCH 63/97] =?UTF-8?q?Chore=20:=20=EC=82=AD=EC=A0=9C=ED=95=98?= =?UTF-8?q?=EC=A7=80=20=EC=95=8A=EB=8A=94=20=ED=81=B4=EB=A0=88=EC=8A=A4=20?= =?UTF-8?q?=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/accumulator/InFixAccumulator.java | 56 ------------------ src/main/java/calculator/Calculator.java | 59 ------------------- src/main/java/options/Options.java | 17 ------ 3 files changed, 132 deletions(-) delete mode 100644 src/main/java/accumulator/InFixAccumulator.java delete mode 100644 src/main/java/calculator/Calculator.java delete mode 100644 src/main/java/options/Options.java diff --git a/src/main/java/accumulator/InFixAccumulator.java b/src/main/java/accumulator/InFixAccumulator.java deleted file mode 100644 index 99196d1..0000000 --- a/src/main/java/accumulator/InFixAccumulator.java +++ /dev/null @@ -1,56 +0,0 @@ -package accumulator; - -import java.util.Arrays; -import java.util.Stack; - -public class InFixAccumulator implements Accumulator { - - private String postfix = ""; - - - @Override - public int calculate(String inFixCalculator) { - String postFix = changeToPostFix(inFixCalculator); - PostFixAccumulator postFixCalculator = new PostFixAccumulator(); - int result = postFixCalculator.calculate(postFix); - return result; - } - - public String changeToPostFix(String expression){ - Stack operator = new Stack(); - String[] splitExpression = expression.split(" "); - Arrays.stream(splitExpression).forEach(str -> { - String value = str; - int operatorPriority = operatorPriority(value); - if(operatorPriority == -1){ - postfix += value+" "; - } - else if(operator.isEmpty()){ - operator.add((value+" ")); - } - else { - while(!operator.isEmpty() && operatorPriority(operator.peek().substring(0,1)) >= operatorPriority){ - postfix += operator.pop(); - } - operator.add((value+" ")); - } - }); - while(!operator.isEmpty()){ - postfix += operator.pop(); - } - return postfix; - } - - - public int operatorPriority(String operator){ - switch (operator){ - case "+": - case "-": - return 1; - case "*": - case "/": - return 2; - } - return -1; - } -} diff --git a/src/main/java/calculator/Calculator.java b/src/main/java/calculator/Calculator.java deleted file mode 100644 index e51ac0e..0000000 --- a/src/main/java/calculator/Calculator.java +++ /dev/null @@ -1,59 +0,0 @@ -package calculator; - -import accumulator.Accumulator; -import accumulator.InFixAccumulator; -import input.Input; -import inputView.ConsoleInputView; -import inputView.InputView; -import output.ConsoleOutput; -import output.Output; -import repository.Repository; -import validation.ExpressionInputValidation; -import validation.SelectValidation; - - -public class Calculator { - - private static final int CHECK = 1; - private static final int CALCULATE = 2; - private static SelectValidation selectValidation = new SelectValidation(); - - private static InputView inputView = new ConsoleInputView(); - - private static ExpressionInputValidation expressionInputValidation = new ExpressionInputValidation(); - - private static Output output = new ConsoleOutput(); - - public static void run() { - Input input = new Input(); - while(true) { - inputView.displayOptions(); - String selectInput = input.selectInput(); - if (!selectValidation.checkSelectValue(selectInput)) { - continue; - } - int select = Integer.parseInt(selectInput); - switch (select) { - case CHECK: - output.printOperationResult(); - break; - - case CALCULATE: - compute(input); - break; - } - } - } - - private static void compute(Input input) { - String expression = input.expressionInput(); - if (!expressionInputValidation.checkExpressionValue(expression)) { - return; - } - Accumulator calculator = new InFixAccumulator(); - String result = Integer.toString(calculator.calculate(expression)); - Repository repository = new Repository(); - output.print(result); - repository.store(expression, result); - } -} diff --git a/src/main/java/options/Options.java b/src/main/java/options/Options.java deleted file mode 100644 index 5d594a6..0000000 --- a/src/main/java/options/Options.java +++ /dev/null @@ -1,17 +0,0 @@ -package options; - -public enum Options { - CHECK(1), - CALCULATE(2); - - - private int value; - - Options(int value) { - this.value = value; - } - - public int getValue() { - return value; - } -} From 35c6e77b48650c891f45c7963bcfc1e9c9d4ca83 Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Fri, 1 Sep 2023 16:55:55 +0900 Subject: [PATCH 64/97] =?UTF-8?q?Feat=20:=20Calculator=20=ED=81=B4?= =?UTF-8?q?=EB=9E=98=EC=8A=A4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/calculator/Calculator.java | 62 ++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 src/main/java/calculator/Calculator.java diff --git a/src/main/java/calculator/Calculator.java b/src/main/java/calculator/Calculator.java new file mode 100644 index 0000000..59573da --- /dev/null +++ b/src/main/java/calculator/Calculator.java @@ -0,0 +1,62 @@ +package calculator; + +import accumulator.Accumulator; +import accumulator.PostFixAccumulator; +import convertor.InfixToPostfixConverter; +import input.Input; +import inputView.ConsoleInputView; +import inputView.InputView; +import output.ConsoleOutput; +import output.Output; +import repository.Repository; +import validation.ExpressionInputValidation; +import validation.SelectValidation; + + +public class Calculator { + + private static final int CHECK = 1; + private static final int CALCULATE = 2; + private static SelectValidation selectValidation = new SelectValidation(); + + private static InputView inputView = new ConsoleInputView(); + + private static ExpressionInputValidation expressionInputValidation = new ExpressionInputValidation(); + + private static Output output = new ConsoleOutput(); + + public static void run() { + Input input = new Input(); + while(true) { + inputView.displayOptions(); + String selectInput = input.selectInput(); + if (!selectValidation.checkSelectValue(selectInput)) { + continue; + } + int select = Integer.parseInt(selectInput); + switch (select) { + case CHECK: + output.printOperationResult(); + break; + + case CALCULATE: + String expression = input.expressionInput(); + compute(expression); + break; + } + } + } + + private static void compute(String expression) { + if (!expressionInputValidation.checkExpressionValue(expression)) { + return; + } + InfixToPostfixConverter infixToPostfixConverter = new InfixToPostfixConverter(); + String postFixExpression = infixToPostfixConverter.changeToPostFix(expression); + Accumulator calculator = new PostFixAccumulator(); + String result = Integer.toString(calculator.calculate(postFixExpression)); + Repository repository = new Repository(); + output.print(result); + repository.store(expression, result); + } +} From 5d9a319a7207f69301bd8a61f911af6f083a43d6 Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Fri, 1 Sep 2023 16:56:25 +0900 Subject: [PATCH 65/97] =?UTF-8?q?Feat=20:=20=ED=9B=84=EC=9C=84=ED=91=9C?= =?UTF-8?q?=EA=B8=B0=EC=8B=9D=EC=9C=BC=EB=A1=9C=20=EB=B3=80=ED=99=98=20?= =?UTF-8?q?=ED=81=B4=EB=9E=98=EC=8A=A4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../convertor/InfixToPostfixConverter.java | 50 +++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100644 src/main/java/convertor/InfixToPostfixConverter.java diff --git a/src/main/java/convertor/InfixToPostfixConverter.java b/src/main/java/convertor/InfixToPostfixConverter.java new file mode 100644 index 0000000..2853a41 --- /dev/null +++ b/src/main/java/convertor/InfixToPostfixConverter.java @@ -0,0 +1,50 @@ +package convertor; + +import accumulator.Accumulator; +import accumulator.PostFixAccumulator; + +import java.util.Arrays; +import java.util.Stack; + +public class InfixToPostfixConverter{ + + private String postfix = ""; + + public String changeToPostFix(String expression){ + Stack operator = new Stack(); + String[] splitExpression = expression.split(" "); + Arrays.stream(splitExpression).forEach(str -> { + String value = str; + int operatorPriority = operatorPriority(value); + if(operatorPriority == -1){ + postfix += value+" "; + } + else if(operator.isEmpty()){ + operator.add((value+" ")); + } + else { + while(!operator.isEmpty() && operatorPriority(operator.peek().substring(0,1)) >= operatorPriority){ + postfix += operator.pop(); + } + operator.add((value+" ")); + } + }); + while(!operator.isEmpty()){ + postfix += operator.pop(); + } + return postfix; + } + + + public int operatorPriority(String operator){ + switch (operator){ + case "+": + case "-": + return 1; + case "*": + case "/": + return 2; + } + return -1; + } +} From 5f2e78e3f9e960ba5eb281227bd23a8a977ece65 Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Fri, 1 Sep 2023 16:58:08 +0900 Subject: [PATCH 66/97] =?UTF-8?q?Chore=20:=20=EC=82=AC=EC=9A=A9=ED=95=98?= =?UTF-8?q?=EC=A7=80=20=EC=95=8A=EB=8A=94=20import=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/convertor/InfixToPostfixConverter.java | 3 --- src/main/java/inputView/ConsoleInputView.java | 1 - src/main/java/main.java | 1 + src/main/java/output/ConsoleOutput.java | 3 +-- src/main/java/repository/Repository.java | 1 - src/test/java/CalculatorTest.java | 3 +-- src/test/java/ChangToPostfixTest.java | 4 ++-- 7 files changed, 5 insertions(+), 11 deletions(-) diff --git a/src/main/java/convertor/InfixToPostfixConverter.java b/src/main/java/convertor/InfixToPostfixConverter.java index 2853a41..1a8a499 100644 --- a/src/main/java/convertor/InfixToPostfixConverter.java +++ b/src/main/java/convertor/InfixToPostfixConverter.java @@ -1,8 +1,5 @@ package convertor; -import accumulator.Accumulator; -import accumulator.PostFixAccumulator; - import java.util.Arrays; import java.util.Stack; diff --git a/src/main/java/inputView/ConsoleInputView.java b/src/main/java/inputView/ConsoleInputView.java index 6c708b5..b949d98 100644 --- a/src/main/java/inputView/ConsoleInputView.java +++ b/src/main/java/inputView/ConsoleInputView.java @@ -1,6 +1,5 @@ package inputView; -import input.Input; public class ConsoleInputView implements InputView { diff --git a/src/main/java/main.java b/src/main/java/main.java index 9d146c1..b12b5bb 100644 --- a/src/main/java/main.java +++ b/src/main/java/main.java @@ -1,3 +1,4 @@ +import accumulator.Accumulator; import calculator.Calculator; public class main { diff --git a/src/main/java/output/ConsoleOutput.java b/src/main/java/output/ConsoleOutput.java index 9bb6713..2f791fa 100644 --- a/src/main/java/output/ConsoleOutput.java +++ b/src/main/java/output/ConsoleOutput.java @@ -1,9 +1,8 @@ package output; -import repository.Repository; + import java.util.LinkedHashMap; -import java.util.List; import java.util.Map; public class ConsoleOutput implements Output { diff --git a/src/main/java/repository/Repository.java b/src/main/java/repository/Repository.java index 7035f20..82a7401 100644 --- a/src/main/java/repository/Repository.java +++ b/src/main/java/repository/Repository.java @@ -1,7 +1,6 @@ package repository; import java.util.LinkedHashMap; -import java.util.List; public class Repository { diff --git a/src/test/java/CalculatorTest.java b/src/test/java/CalculatorTest.java index f31a5f6..5b045c3 100644 --- a/src/test/java/CalculatorTest.java +++ b/src/test/java/CalculatorTest.java @@ -1,5 +1,4 @@ import accumulator.Accumulator; -import accumulator.InFixAccumulator; import accumulator.PostFixAccumulator; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; @@ -16,7 +15,7 @@ public void PostFixCalculator() { @Test public void InFixCalculator(){ - Accumulator calculator = new InFixAccumulator(); + Accumulator calculator = new PostFixAccumulator(); int expect = calculator.calculate("3 + 2 + 5 * 2 / 1 "); Assertions.assertEquals(15,expect); } diff --git a/src/test/java/ChangToPostfixTest.java b/src/test/java/ChangToPostfixTest.java index da9f05a..548fffe 100644 --- a/src/test/java/ChangToPostfixTest.java +++ b/src/test/java/ChangToPostfixTest.java @@ -1,4 +1,4 @@ -import accumulator.InFixAccumulator; +import convertor.InfixToPostfixConverter; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; @@ -8,7 +8,7 @@ public class ChangToPostfixTest { public void PostfixTest(){ String input = "1 + 2 * 3"; String expect = "1 2 3 * + "; - InFixAccumulator calculator = new InFixAccumulator(); + InfixToPostfixConverter calculator = new InfixToPostfixConverter(); String value = calculator.changeToPostFix(input); Assertions.assertEquals(expect,value); } From a1fa676152df54208992d76b02f4191bf1c4ba33 Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Fri, 1 Sep 2023 17:43:37 +0900 Subject: [PATCH 67/97] =?UTF-8?q?Chore=20:=20googleStyle=20=EC=BB=A8?= =?UTF-8?q?=EB=B2=A4=EC=85=98=20=EC=A0=81=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/accumulator/Accumulator.java | 2 +- .../java/accumulator/PostFixAccumulator.java | 78 +++++++++--------- src/main/java/calculator/Calculator.java | 82 +++++++++---------- .../convertor/InfixToPostfixConverter.java | 67 ++++++++------- src/main/java/execution/Execution.java | 59 ------------- src/main/java/input/Input.java | 36 ++++---- src/main/java/inputView/ConsoleInputView.java | 14 ++-- src/main/java/inputView/InputView.java | 3 +- src/main/java/main.java | 8 +- src/main/java/output/ConsoleOutput.java | 29 ++++--- src/main/java/output/Output.java | 8 +- src/main/java/repository/Repository.java | 14 ++-- .../validation/ExpressionInputValidation.java | 18 ++-- .../java/validation/SelectValidation.java | 19 +++-- 14 files changed, 191 insertions(+), 246 deletions(-) delete mode 100644 src/main/java/execution/Execution.java diff --git a/src/main/java/accumulator/Accumulator.java b/src/main/java/accumulator/Accumulator.java index 800ca56..396a9d9 100644 --- a/src/main/java/accumulator/Accumulator.java +++ b/src/main/java/accumulator/Accumulator.java @@ -2,5 +2,5 @@ public interface Accumulator { - public int calculate(String calculator); + public int calculate(String calculator); } diff --git a/src/main/java/accumulator/PostFixAccumulator.java b/src/main/java/accumulator/PostFixAccumulator.java index 81455c9..5d0d609 100644 --- a/src/main/java/accumulator/PostFixAccumulator.java +++ b/src/main/java/accumulator/PostFixAccumulator.java @@ -3,43 +3,45 @@ import java.util.Stack; public class PostFixAccumulator implements Accumulator { - private static final String PLUS = "+"; - private static final String MINIS = "-"; - private static final String MULTIPLY = "*"; - private static final String DIVIDE = "/"; - private int firstOperand; - private int secondOperand; - @Override - public int calculate(String postfixExpression){ - Stack result = new Stack<>(); - String[] splitPostfixExpression = postfixExpression.split(" "); - for (String str : splitPostfixExpression) { - String value = str; - switch (value) { - case PLUS: - firstOperand = result.pop(); - secondOperand = result.pop(); - result.push(secondOperand + firstOperand); - break; - case MINIS: - firstOperand = result.pop(); - secondOperand = result.pop(); - result.push(secondOperand - firstOperand); - break; - case MULTIPLY: - firstOperand = result.pop(); - secondOperand = result.pop(); - result.push(secondOperand * firstOperand); - break; - case DIVIDE: - firstOperand = result.pop(); - secondOperand = result.pop(); - result.push(secondOperand / firstOperand); - break; - default: - result.push(Integer.parseInt(value)); - } - } - return result.pop(); + + private static final String PLUS = "+"; + private static final String MINIS = "-"; + private static final String MULTIPLY = "*"; + private static final String DIVIDE = "/"; + private int firstOperand; + private int secondOperand; + + @Override + public int calculate(String postfixExpression) { + Stack result = new Stack<>(); + String[] splitPostfixExpression = postfixExpression.split(" "); + for (String str : splitPostfixExpression) { + String value = str; + switch (value) { + case PLUS: + firstOperand = result.pop(); + secondOperand = result.pop(); + result.push(secondOperand + firstOperand); + break; + case MINIS: + firstOperand = result.pop(); + secondOperand = result.pop(); + result.push(secondOperand - firstOperand); + break; + case MULTIPLY: + firstOperand = result.pop(); + secondOperand = result.pop(); + result.push(secondOperand * firstOperand); + break; + case DIVIDE: + firstOperand = result.pop(); + secondOperand = result.pop(); + result.push(secondOperand / firstOperand); + break; + default: + result.push(Integer.parseInt(value)); + } } + return result.pop(); + } } diff --git a/src/main/java/calculator/Calculator.java b/src/main/java/calculator/Calculator.java index 59573da..89f7df4 100644 --- a/src/main/java/calculator/Calculator.java +++ b/src/main/java/calculator/Calculator.java @@ -15,48 +15,48 @@ public class Calculator { - private static final int CHECK = 1; - private static final int CALCULATE = 2; - private static SelectValidation selectValidation = new SelectValidation(); - - private static InputView inputView = new ConsoleInputView(); - - private static ExpressionInputValidation expressionInputValidation = new ExpressionInputValidation(); - - private static Output output = new ConsoleOutput(); - - public static void run() { - Input input = new Input(); - while(true) { - inputView.displayOptions(); - String selectInput = input.selectInput(); - if (!selectValidation.checkSelectValue(selectInput)) { - continue; - } - int select = Integer.parseInt(selectInput); - switch (select) { - case CHECK: - output.printOperationResult(); - break; - - case CALCULATE: - String expression = input.expressionInput(); - compute(expression); - break; - } - } + private static final int CHECK = 1; + private static final int CALCULATE = 2; + private static SelectValidation selectValidation = new SelectValidation(); + + private static InputView inputView = new ConsoleInputView(); + + private static ExpressionInputValidation expressionInputValidation = new ExpressionInputValidation(); + + private static Output output = new ConsoleOutput(); + + public static void run() { + Input input = new Input(); + while (true) { + inputView.displayOptions(); + String selectInput = input.selectInput(); + if (!selectValidation.checkSelectValue(selectInput)) { + continue; + } + int select = Integer.parseInt(selectInput); + switch (select) { + case CHECK: + output.printOperationResult(); + break; + + case CALCULATE: + String expression = input.expressionInput(); + compute(expression); + break; + } } + } - private static void compute(String expression) { - if (!expressionInputValidation.checkExpressionValue(expression)) { - return; - } - InfixToPostfixConverter infixToPostfixConverter = new InfixToPostfixConverter(); - String postFixExpression = infixToPostfixConverter.changeToPostFix(expression); - Accumulator calculator = new PostFixAccumulator(); - String result = Integer.toString(calculator.calculate(postFixExpression)); - Repository repository = new Repository(); - output.print(result); - repository.store(expression, result); + private static void compute(String expression) { + if (!expressionInputValidation.checkExpressionValue(expression)) { + return; } + InfixToPostfixConverter infixToPostfixConverter = new InfixToPostfixConverter(); + String postFixExpression = infixToPostfixConverter.changeToPostFix(expression); + Accumulator calculator = new PostFixAccumulator(); + String result = Integer.toString(calculator.calculate(postFixExpression)); + Repository repository = new Repository(); + output.print(result); + repository.store(expression, result); + } } diff --git a/src/main/java/convertor/InfixToPostfixConverter.java b/src/main/java/convertor/InfixToPostfixConverter.java index 1a8a499..aa6b788 100644 --- a/src/main/java/convertor/InfixToPostfixConverter.java +++ b/src/main/java/convertor/InfixToPostfixConverter.java @@ -3,45 +3,44 @@ import java.util.Arrays; import java.util.Stack; -public class InfixToPostfixConverter{ +public class InfixToPostfixConverter { - private String postfix = ""; + private String postfix = ""; - public String changeToPostFix(String expression){ - Stack operator = new Stack(); - String[] splitExpression = expression.split(" "); - Arrays.stream(splitExpression).forEach(str -> { - String value = str; - int operatorPriority = operatorPriority(value); - if(operatorPriority == -1){ - postfix += value+" "; - } - else if(operator.isEmpty()){ - operator.add((value+" ")); - } - else { - while(!operator.isEmpty() && operatorPriority(operator.peek().substring(0,1)) >= operatorPriority){ - postfix += operator.pop(); - } - operator.add((value+" ")); - } - }); - while(!operator.isEmpty()){ - postfix += operator.pop(); + public String changeToPostFix(String expression) { + Stack operator = new Stack(); + String[] splitExpression = expression.split(" "); + Arrays.stream(splitExpression).forEach(str -> { + String value = str; + int operatorPriority = operatorPriority(value); + if (operatorPriority == -1) { + postfix += value + " "; + } else if (operator.isEmpty()) { + operator.add((value + " ")); + } else { + while (!operator.isEmpty() + && operatorPriority(operator.peek().substring(0, 1)) >= operatorPriority) { + postfix += operator.pop(); } - return postfix; + operator.add((value + " ")); + } + }); + while (!operator.isEmpty()) { + postfix += operator.pop(); } + return postfix; + } - public int operatorPriority(String operator){ - switch (operator){ - case "+": - case "-": - return 1; - case "*": - case "/": - return 2; - } - return -1; + public int operatorPriority(String operator) { + switch (operator) { + case "+": + case "-": + return 1; + case "*": + case "/": + return 2; } + return -1; + } } diff --git a/src/main/java/execution/Execution.java b/src/main/java/execution/Execution.java deleted file mode 100644 index 5ad08fd..0000000 --- a/src/main/java/execution/Execution.java +++ /dev/null @@ -1,59 +0,0 @@ -package execution; - -import calculator.Calculator; -import calculator.InFixCalculator; -import input.Input; -import inputView.ConsoleInputView; -import inputView.InputView; -import output.ConsoleOutput; -import options.Options; -import output.Output; -import repository.Repository; -import validation.ExpressionInputValidation; -import validation.SelectValidation; - - -public class Execution { - - private static final int CHECK = 1; - private static final int CALCULATE = 2; - private static SelectValidation selectValidation = new SelectValidation(); - - private static InputView inputView = new ConsoleInputView(); - - private static ExpressionInputValidation expressionInputValidation = new ExpressionInputValidation(); - - private static Output output = new ConsoleOutput(); - - public static void run() { - Input input = new Input(); - while(true) { - inputView.displayOptions(); - String selectInput = input.selectInput(); - if (!selectValidation.checkSelectValue(selectInput)) { - continue; - } - int select = Integer.parseInt(selectInput); - switch (select) { - case CHECK: - output.printOperationResult(); - break; - - case CALCULATE: - compute(input); - } - } - } - - private static void compute(Input input) { - String expression = input.expressionInput(); - if (!expressionInputValidation.checkExpressionValue(expression)) { - return; - } - Calculator calculator = new InFixCalculator(); - String result = Integer.toString(calculator.calculate(expression)); - Repository repository = new Repository(); - output.print(result); - repository.store(expression, result); - } -} diff --git a/src/main/java/input/Input.java b/src/main/java/input/Input.java index 0e3c354..7ea11e7 100644 --- a/src/main/java/input/Input.java +++ b/src/main/java/input/Input.java @@ -7,25 +7,25 @@ public class Input { - BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); - public String selectInput() { - String selectInput = ""; - try { - selectInput = bufferedReader.readLine(); - } - catch (IOException e) { - selectInput = ""; - } - return selectInput; + BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); + + public String selectInput() { + String selectInput = ""; + try { + selectInput = bufferedReader.readLine(); + } catch (IOException e) { + selectInput = ""; } + return selectInput; + } - public String expressionInput(){ - String expressionInput = ""; - try { - expressionInput = bufferedReader.readLine(); - } catch (IOException e) { - expressionInput = ""; - } - return expressionInput; + public String expressionInput() { + String expressionInput = ""; + try { + expressionInput = bufferedReader.readLine(); + } catch (IOException e) { + expressionInput = ""; } + return expressionInput; + } } diff --git a/src/main/java/inputView/ConsoleInputView.java b/src/main/java/inputView/ConsoleInputView.java index b949d98..e325e68 100644 --- a/src/main/java/inputView/ConsoleInputView.java +++ b/src/main/java/inputView/ConsoleInputView.java @@ -3,12 +3,12 @@ public class ConsoleInputView implements InputView { - @Override - public void displayOptions() { - System.out.println("1.조회"); - System.out.println("2.계산"); - System.out.println(); - System.out.print("선택 : "); - } + @Override + public void displayOptions() { + System.out.println("1.조회"); + System.out.println("2.계산"); + System.out.println(); + System.out.print("선택 : "); + } } diff --git a/src/main/java/inputView/InputView.java b/src/main/java/inputView/InputView.java index 79e591d..d975cbc 100644 --- a/src/main/java/inputView/InputView.java +++ b/src/main/java/inputView/InputView.java @@ -1,5 +1,6 @@ package inputView; public interface InputView { - void displayOptions(); + + void displayOptions(); } diff --git a/src/main/java/main.java b/src/main/java/main.java index b12b5bb..9af4644 100644 --- a/src/main/java/main.java +++ b/src/main/java/main.java @@ -1,9 +1,9 @@ -import accumulator.Accumulator; + import calculator.Calculator; public class main { - public static void main(String[] args) { - Calculator.run(); - } + public static void main(String[] args) { + Calculator.run(); + } } diff --git a/src/main/java/output/ConsoleOutput.java b/src/main/java/output/ConsoleOutput.java index 2f791fa..3bf803b 100644 --- a/src/main/java/output/ConsoleOutput.java +++ b/src/main/java/output/ConsoleOutput.java @@ -1,28 +1,27 @@ package output; - import java.util.LinkedHashMap; import java.util.Map; public class ConsoleOutput implements Output { - @Override - public void printOperationResult() { - LinkedHashMap result = repository.getResult(); - StringBuilder stringBuilder = new StringBuilder(); - for (Map.Entry entry : result.entrySet()) { - String key = entry.getKey(); - String value = entry.getValue(); - stringBuilder.append(key).append(" = ").append(value).append("\n"); - } - System.out.println(stringBuilder); + @Override + public void printOperationResult() { + LinkedHashMap result = repository.getResult(); + StringBuilder stringBuilder = new StringBuilder(); + for (Map.Entry entry : result.entrySet()) { + String key = entry.getKey(); + String value = entry.getValue(); + stringBuilder.append(key).append(" = ").append(value).append("\n"); } + System.out.println(stringBuilder); + } - @Override - public void print(String msg) { - System.out.println(msg); - } + @Override + public void print(String msg) { + System.out.println(msg); + } } diff --git a/src/main/java/output/Output.java b/src/main/java/output/Output.java index 69c8499..31e47c5 100644 --- a/src/main/java/output/Output.java +++ b/src/main/java/output/Output.java @@ -3,10 +3,12 @@ import repository.Repository; public interface Output { - public Repository repository = new Repository(); - public void printOperationResult(); - public void print(String msg); + public Repository repository = new Repository(); + + public void printOperationResult(); + + public void print(String msg); } diff --git a/src/main/java/repository/Repository.java b/src/main/java/repository/Repository.java index 82a7401..a6aeb44 100644 --- a/src/main/java/repository/Repository.java +++ b/src/main/java/repository/Repository.java @@ -4,15 +4,15 @@ public class Repository { - private static LinkedHashMap map = new LinkedHashMap<>(); + private static LinkedHashMap map = new LinkedHashMap<>(); - public void store(String expression,String result){ - map.put(expression,result); + public void store(String expression, String result) { + map.put(expression, result); - } + } - public LinkedHashMap getResult(){ - return map; - } + public LinkedHashMap getResult() { + return map; + } } diff --git a/src/main/java/validation/ExpressionInputValidation.java b/src/main/java/validation/ExpressionInputValidation.java index f03c63d..ead930e 100644 --- a/src/main/java/validation/ExpressionInputValidation.java +++ b/src/main/java/validation/ExpressionInputValidation.java @@ -8,16 +8,16 @@ public class ExpressionInputValidation { - private final Output output = new ConsoleOutput(); - private final Pattern REGEX = Pattern.compile("^\\d+(?: \\+ \\d+| - \\d+| \\* \\d+| \\/ \\d+)*$"); + private final Output output = new ConsoleOutput(); + private final Pattern REGEX = Pattern.compile("^\\d+(?: \\+ \\d+| - \\d+| \\* \\d+| \\/ \\d+)*$"); - public boolean checkExpressionValue(String expression){ - Matcher matcher = REGEX.matcher(expression); - if(!matcher.matches()){ - output.print("잘못된 형식의 식입니다."); - return false; - } - return true; + public boolean checkExpressionValue(String expression) { + Matcher matcher = REGEX.matcher(expression); + if (!matcher.matches()) { + output.print("잘못된 형식의 식입니다."); + return false; } + return true; + } } diff --git a/src/main/java/validation/SelectValidation.java b/src/main/java/validation/SelectValidation.java index 5099420..248b89b 100644 --- a/src/main/java/validation/SelectValidation.java +++ b/src/main/java/validation/SelectValidation.java @@ -8,15 +8,16 @@ public class SelectValidation { - private final Output output = new ConsoleOutput(); - private final Pattern REGEX = Pattern.compile("^[12]+$"); - public boolean checkSelectValue(String select){ - Matcher matcher = REGEX.matcher(select); - if (!matcher.matches()){ - output.print("잘못된 입력값 입니다."); - return false; - } - return true; + private final Output output = new ConsoleOutput(); + private final Pattern REGEX = Pattern.compile("^[12]+$"); + + public boolean checkSelectValue(String select) { + Matcher matcher = REGEX.matcher(select); + if (!matcher.matches()) { + output.print("잘못된 입력값 입니다."); + return false; } + return true; + } } From 87dcb6baddb716c13382764bd2dfd5a3ee1fb764 Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Fri, 1 Sep 2023 21:02:52 +0900 Subject: [PATCH 68/97] =?UTF-8?q?Test=20:=20=EC=82=AC=EC=B9=99=EC=97=B0?= =?UTF-8?q?=EC=82=B0=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle | 1 + src/test/java/CalculatorTest.java | 11 ++++++++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/build.gradle b/build.gradle index 3cae2d7..dcd9ac7 100644 --- a/build.gradle +++ b/build.gradle @@ -12,6 +12,7 @@ repositories { dependencies { testImplementation 'org.junit.jupiter:junit-jupiter-api:5.8.1' testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.8.1' + testImplementation 'org.junit.jupiter:junit-jupiter-params:5.8.1' } test { diff --git a/src/test/java/CalculatorTest.java b/src/test/java/CalculatorTest.java index 5b045c3..ed5d7ea 100644 --- a/src/test/java/CalculatorTest.java +++ b/src/test/java/CalculatorTest.java @@ -1,16 +1,21 @@ import accumulator.Accumulator; import accumulator.PostFixAccumulator; import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; public class CalculatorTest { - @Test - public void PostFixCalculator() { + @ParameterizedTest + @DisplayName("사칙연산") + @ValueSource(ints = {10,20,27}) + public void PostFixCalculator(int expectResult) { PostFixAccumulator calculator = new PostFixAccumulator(); int result = calculator.calculate("3 4 5 + *"); - Assertions.assertEquals(27,result); + Assertions.assertEquals(expectResult,result); } @Test From 7107d5c54d5dce4e86906c4aa73e940d9b434780 Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Fri, 1 Sep 2023 21:13:23 +0900 Subject: [PATCH 69/97] =?UTF-8?q?Test=20:=20=EC=82=AC=EC=B9=99=EC=97=B0?= =?UTF-8?q?=EC=82=B0=20=EB=B3=84=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=BC=80?= =?UTF-8?q?=EC=9D=B4=EC=8A=A4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/CalculatorTest.java | 44 ++++++++++++++++++++++++++----- 1 file changed, 37 insertions(+), 7 deletions(-) diff --git a/src/test/java/CalculatorTest.java b/src/test/java/CalculatorTest.java index ed5d7ea..fbea8ab 100644 --- a/src/test/java/CalculatorTest.java +++ b/src/test/java/CalculatorTest.java @@ -9,19 +9,49 @@ public class CalculatorTest { + @ParameterizedTest + @DisplayName("덧셈") + @ValueSource(ints = {1,10,100,1000}) + public void postFixAddCalculate(int expectResult){ + Accumulator postFixAccumulator = new PostFixAccumulator(); + int result = postFixAccumulator.calculate("9 1 90 + +"); + Assertions.assertEquals(expectResult,result); + } + + @ParameterizedTest + @DisplayName("뺼셈") + @ValueSource(ints = {1,10,100,1000}) + public void postFixMinusCalculate(int expectResult){ + Accumulator postFixAccumulator = new PostFixAccumulator(); + int result = postFixAccumulator.calculate("9 8 -"); + Assertions.assertEquals(expectResult,result); + } + + @ParameterizedTest + @DisplayName("곱셈") + @ValueSource(ints = {1,10,100,1000}) + public void postFixMultiplyCalculate(int expectResult){ + Accumulator postFixAccumulator = new PostFixAccumulator(); + int result = postFixAccumulator.calculate("10 100 *"); + Assertions.assertEquals(expectResult,result); + } + + @ParameterizedTest + @DisplayName("나눗셈") + @ValueSource(ints = {1,10,100,1000}) + public void postFixDivideCalculate(int expectResult){ + Accumulator postFixAccumulator = new PostFixAccumulator(); + int result = postFixAccumulator.calculate("100 10 /"); + Assertions.assertEquals(expectResult,result); + } + @ParameterizedTest @DisplayName("사칙연산") @ValueSource(ints = {10,20,27}) - public void PostFixCalculator(int expectResult) { + public void PostFixCalculate(int expectResult) { PostFixAccumulator calculator = new PostFixAccumulator(); int result = calculator.calculate("3 4 5 + *"); Assertions.assertEquals(expectResult,result); } - @Test - public void InFixCalculator(){ - Accumulator calculator = new PostFixAccumulator(); - int expect = calculator.calculate("3 + 2 + 5 * 2 / 1 "); - Assertions.assertEquals(15,expect); - } } From 123488deba3bd84c56c8901d1a4beede25adbc92 Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Fri, 1 Sep 2023 21:21:17 +0900 Subject: [PATCH 70/97] =?UTF-8?q?Test=20:=20=EC=A4=91=EC=9C=84=ED=91=9C?= =?UTF-8?q?=EA=B8=B0=EC=8B=9D=20=ED=9B=84=EC=9C=84=ED=91=9C=EA=B8=B0?= =?UTF-8?q?=EC=8B=9D=20=EB=B3=80=ED=99=98=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20?= =?UTF-8?q?=EC=BC=80=EC=9D=B4=EC=8A=A4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/CalculatorTest.java | 88 +++++++++++++-------------- src/test/java/ChangToPostfixTest.java | 15 +++-- 2 files changed, 54 insertions(+), 49 deletions(-) diff --git a/src/test/java/CalculatorTest.java b/src/test/java/CalculatorTest.java index fbea8ab..9874fa8 100644 --- a/src/test/java/CalculatorTest.java +++ b/src/test/java/CalculatorTest.java @@ -9,49 +9,49 @@ public class CalculatorTest { - @ParameterizedTest - @DisplayName("덧셈") - @ValueSource(ints = {1,10,100,1000}) - public void postFixAddCalculate(int expectResult){ - Accumulator postFixAccumulator = new PostFixAccumulator(); - int result = postFixAccumulator.calculate("9 1 90 + +"); - Assertions.assertEquals(expectResult,result); - } - - @ParameterizedTest - @DisplayName("뺼셈") - @ValueSource(ints = {1,10,100,1000}) - public void postFixMinusCalculate(int expectResult){ - Accumulator postFixAccumulator = new PostFixAccumulator(); - int result = postFixAccumulator.calculate("9 8 -"); - Assertions.assertEquals(expectResult,result); - } - - @ParameterizedTest - @DisplayName("곱셈") - @ValueSource(ints = {1,10,100,1000}) - public void postFixMultiplyCalculate(int expectResult){ - Accumulator postFixAccumulator = new PostFixAccumulator(); - int result = postFixAccumulator.calculate("10 100 *"); - Assertions.assertEquals(expectResult,result); - } - - @ParameterizedTest - @DisplayName("나눗셈") - @ValueSource(ints = {1,10,100,1000}) - public void postFixDivideCalculate(int expectResult){ - Accumulator postFixAccumulator = new PostFixAccumulator(); - int result = postFixAccumulator.calculate("100 10 /"); - Assertions.assertEquals(expectResult,result); - } - - @ParameterizedTest - @DisplayName("사칙연산") - @ValueSource(ints = {10,20,27}) - public void PostFixCalculate(int expectResult) { - PostFixAccumulator calculator = new PostFixAccumulator(); - int result = calculator.calculate("3 4 5 + *"); - Assertions.assertEquals(expectResult,result); - } + @ParameterizedTest + @DisplayName("덧셈") + @ValueSource(ints = {1, 10, 100, 1000}) + public void postFixAddCalculate(int expectResult) { + Accumulator postFixAccumulator = new PostFixAccumulator(); + int result = postFixAccumulator.calculate("9 1 90 + +"); + Assertions.assertEquals(expectResult, result); + } + + @ParameterizedTest + @DisplayName("뺼셈") + @ValueSource(ints = {1, 10, 100, 1000}) + public void postFixMinusCalculate(int expectResult) { + Accumulator postFixAccumulator = new PostFixAccumulator(); + int result = postFixAccumulator.calculate("9 8 -"); + Assertions.assertEquals(expectResult, result); + } + + @ParameterizedTest + @DisplayName("곱셈") + @ValueSource(ints = {1, 10, 100, 1000}) + public void postFixMultiplyCalculate(int expectResult) { + Accumulator postFixAccumulator = new PostFixAccumulator(); + int result = postFixAccumulator.calculate("10 100 *"); + Assertions.assertEquals(expectResult, result); + } + + @ParameterizedTest + @DisplayName("나눗셈") + @ValueSource(ints = {1, 10, 100, 1000}) + public void postFixDivideCalculate(int expectResult) { + Accumulator postFixAccumulator = new PostFixAccumulator(); + int result = postFixAccumulator.calculate("100 10 /"); + Assertions.assertEquals(expectResult, result); + } + + @ParameterizedTest + @DisplayName("사칙연산") + @ValueSource(ints = {10, 20, 27}) + public void PostFixCalculate(int expectResult) { + PostFixAccumulator calculator = new PostFixAccumulator(); + int result = calculator.calculate("3 4 5 + *"); + Assertions.assertEquals(expectResult, result); + } } diff --git a/src/test/java/ChangToPostfixTest.java b/src/test/java/ChangToPostfixTest.java index 548fffe..053d739 100644 --- a/src/test/java/ChangToPostfixTest.java +++ b/src/test/java/ChangToPostfixTest.java @@ -1,15 +1,20 @@ import convertor.InfixToPostfixConverter; import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; public class ChangToPostfixTest { -@Test -public void PostfixTest(){ + @ParameterizedTest + @DisplayName("중위 표기식 후위 표기식 변환") + @ValueSource(strings = {"1 2 3 * + ", "1 + 2 * 3"}) + public void InfixToPostfixTest(String expectResult) { String input = "1 + 2 * 3"; - String expect = "1 2 3 * + "; InfixToPostfixConverter calculator = new InfixToPostfixConverter(); String value = calculator.changeToPostFix(input); - Assertions.assertEquals(expect,value); -} + Assertions.assertEquals(expectResult, value); + } + } From 2c23bcba97ccb93132f94efe27c5ab781b794019 Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Fri, 1 Sep 2023 21:29:27 +0900 Subject: [PATCH 71/97] =?UTF-8?q?Test=20:=20=EC=98=B5=EC=85=98=EC=84=A0?= =?UTF-8?q?=ED=83=9D=20=EA=B2=80=EC=A6=9D=ED=85=8C=EC=8A=A4=ED=8A=B8=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/ValidationTest.java | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100644 src/test/java/ValidationTest.java diff --git a/src/test/java/ValidationTest.java b/src/test/java/ValidationTest.java new file mode 100644 index 0000000..0f37333 --- /dev/null +++ b/src/test/java/ValidationTest.java @@ -0,0 +1,17 @@ +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; +import validation.SelectValidation; + +public class ValidationTest { + + @ParameterizedTest + @DisplayName("옵션 선택 테스트") + @ValueSource(strings = {"1","2","10000"}) + public void OptionSelectTest(String selectInput){ + SelectValidation selectValidation = new SelectValidation(); + boolean result = selectValidation.checkSelectValue(selectInput); + Assertions.assertTrue(result); + } +} From 5ae1ab2a073265f6b7f0c8b2de90b75f408526be Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Fri, 1 Sep 2023 21:39:31 +0900 Subject: [PATCH 72/97] =?UTF-8?q?Test=20:=20=EC=98=B5=EC=85=98=20=EC=9E=85?= =?UTF-8?q?=EB=A0=A5=20=EA=B2=80=EC=A6=9D=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/ValidationTest.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/test/java/ValidationTest.java b/src/test/java/ValidationTest.java index 0f37333..faa48c0 100644 --- a/src/test/java/ValidationTest.java +++ b/src/test/java/ValidationTest.java @@ -1,3 +1,5 @@ +import java.io.ByteArrayOutputStream; +import java.io.PrintStream; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.params.ParameterizedTest; @@ -14,4 +16,17 @@ public void OptionSelectTest(String selectInput){ boolean result = selectValidation.checkSelectValue(selectInput); Assertions.assertTrue(result); } + + @ParameterizedTest + @DisplayName("옵션 선택 검증 테스트") + @ValueSource(strings = {"1","2","10000"}) + public void OptionSelectValidationTest(String selectInput){ + ByteArrayOutputStream outputStreamCaptor = new ByteArrayOutputStream(); + System.setOut(new PrintStream(outputStreamCaptor)); + SelectValidation selectValidation = new SelectValidation(); + selectValidation.checkSelectValue(selectInput); + Assertions.assertTrue(outputStreamCaptor.toString().trim().equals("잘못된 입력값 입니다.")); + } + + } From 5dd678d8259dd40947635cdb9017ccf1302b8154 Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Fri, 1 Sep 2023 21:46:45 +0900 Subject: [PATCH 73/97] =?UTF-8?q?Test=20:=20=EC=8B=9D=20=EC=9E=85=EB=A0=A5?= =?UTF-8?q?=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/ValidationTest.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/test/java/ValidationTest.java b/src/test/java/ValidationTest.java index faa48c0..f0c79e5 100644 --- a/src/test/java/ValidationTest.java +++ b/src/test/java/ValidationTest.java @@ -4,6 +4,7 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; +import validation.ExpressionInputValidation; import validation.SelectValidation; public class ValidationTest { @@ -28,5 +29,14 @@ public void OptionSelectValidationTest(String selectInput){ Assertions.assertTrue(outputStreamCaptor.toString().trim().equals("잘못된 입력값 입니다.")); } + @ParameterizedTest + @DisplayName(("식 입력 테스트")) + @ValueSource(strings = {"3 + 1 + 2","1 * 2 / 100 + 2 - 10","!!@@##"}) + public void inputExpressionTest(String expressionInput){ + ExpressionInputValidation expressionInputValidation = new ExpressionInputValidation(); + boolean result = expressionInputValidation.checkExpressionValue(expressionInput); + Assertions.assertTrue(result); + } + } From 308f1c77c967271a6c7812e5e7a833eb45bb0514 Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Fri, 1 Sep 2023 21:50:05 +0900 Subject: [PATCH 74/97] =?UTF-8?q?Test=20:=20=EC=8B=9D=20=EC=9E=85=EB=A0=A5?= =?UTF-8?q?=20=EA=B2=80=EC=A6=9D=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/ValidationTest.java | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/src/test/java/ValidationTest.java b/src/test/java/ValidationTest.java index f0c79e5..f1ee1df 100644 --- a/src/test/java/ValidationTest.java +++ b/src/test/java/ValidationTest.java @@ -11,8 +11,8 @@ public class ValidationTest { @ParameterizedTest @DisplayName("옵션 선택 테스트") - @ValueSource(strings = {"1","2","10000"}) - public void OptionSelectTest(String selectInput){ + @ValueSource(strings = {"1", "2", "10000"}) + public void OptionSelectTest(String selectInput) { SelectValidation selectValidation = new SelectValidation(); boolean result = selectValidation.checkSelectValue(selectInput); Assertions.assertTrue(result); @@ -20,8 +20,8 @@ public void OptionSelectTest(String selectInput){ @ParameterizedTest @DisplayName("옵션 선택 검증 테스트") - @ValueSource(strings = {"1","2","10000"}) - public void OptionSelectValidationTest(String selectInput){ + @ValueSource(strings = {"1", "2", "10000"}) + public void OptionSelectValidationTest(String selectInput) { ByteArrayOutputStream outputStreamCaptor = new ByteArrayOutputStream(); System.setOut(new PrintStream(outputStreamCaptor)); SelectValidation selectValidation = new SelectValidation(); @@ -30,13 +30,24 @@ public void OptionSelectValidationTest(String selectInput){ } @ParameterizedTest - @DisplayName(("식 입력 테스트")) - @ValueSource(strings = {"3 + 1 + 2","1 * 2 / 100 + 2 - 10","!!@@##"}) - public void inputExpressionTest(String expressionInput){ + @DisplayName("식 입력 테스트") + @ValueSource(strings = {"3 + 1 + 2", "1 * 2 / 100 + 2 - 10", "!!@@##"}) + public void inputExpressionTest(String expressionInput) { ExpressionInputValidation expressionInputValidation = new ExpressionInputValidation(); boolean result = expressionInputValidation.checkExpressionValue(expressionInput); Assertions.assertTrue(result); } - + @ParameterizedTest + @DisplayName("식 입력 검증 테스트") + @ValueSource(strings = {"3 + 1 + 2", "1 * 2 / 100 + 2 - 10", "!!@@##"}) + public void inputExpressionValidationTest(String expressionInput) { + ByteArrayOutputStream outputStreamCaptor = new ByteArrayOutputStream(); + System.setOut(new PrintStream(outputStreamCaptor)); + ExpressionInputValidation expressionInputValidation = new ExpressionInputValidation(); + expressionInputValidation.checkExpressionValue(expressionInput); + Assertions.assertTrue(outputStreamCaptor.toString().trim().equals("잘못된 형식의 식입니다.")); + } } + + From cfddb59e41fe3788fdfc6829297d6438301ee471 Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Sat, 2 Sep 2023 00:15:21 +0900 Subject: [PATCH 75/97] =?UTF-8?q?Test=20:=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20?= =?UTF-8?q?=EB=8D=B0=EC=9D=B4=ED=84=B0=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/ValidationTest.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/test/java/ValidationTest.java b/src/test/java/ValidationTest.java index f1ee1df..029c3a8 100644 --- a/src/test/java/ValidationTest.java +++ b/src/test/java/ValidationTest.java @@ -11,7 +11,7 @@ public class ValidationTest { @ParameterizedTest @DisplayName("옵션 선택 테스트") - @ValueSource(strings = {"1", "2", "10000"}) + @ValueSource(strings = {"1", "2"}) public void OptionSelectTest(String selectInput) { SelectValidation selectValidation = new SelectValidation(); boolean result = selectValidation.checkSelectValue(selectInput); @@ -20,7 +20,7 @@ public void OptionSelectTest(String selectInput) { @ParameterizedTest @DisplayName("옵션 선택 검증 테스트") - @ValueSource(strings = {"1", "2", "10000"}) + @ValueSource(strings = {"10000","abc","!!@@##"}) public void OptionSelectValidationTest(String selectInput) { ByteArrayOutputStream outputStreamCaptor = new ByteArrayOutputStream(); System.setOut(new PrintStream(outputStreamCaptor)); @@ -31,7 +31,7 @@ public void OptionSelectValidationTest(String selectInput) { @ParameterizedTest @DisplayName("식 입력 테스트") - @ValueSource(strings = {"3 + 1 + 2", "1 * 2 / 100 + 2 - 10", "!!@@##"}) + @ValueSource(strings = {"3 + 1 + 2", "1 * 2 / 100 + 2 - 10"}) public void inputExpressionTest(String expressionInput) { ExpressionInputValidation expressionInputValidation = new ExpressionInputValidation(); boolean result = expressionInputValidation.checkExpressionValue(expressionInput); @@ -40,7 +40,7 @@ public void inputExpressionTest(String expressionInput) { @ParameterizedTest @DisplayName("식 입력 검증 테스트") - @ValueSource(strings = {"3 + 1 + 2", "1 * 2 / 100 + 2 - 10", "!!@@##"}) + @ValueSource(strings = {"1*2/100+2-10", "!!@@##"}) public void inputExpressionValidationTest(String expressionInput) { ByteArrayOutputStream outputStreamCaptor = new ByteArrayOutputStream(); System.setOut(new PrintStream(outputStreamCaptor)); From a5bfd088dc05fa8fb133fad36423fd0ef9eb3ceb Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Sat, 2 Sep 2023 00:15:47 +0900 Subject: [PATCH 76/97] =?UTF-8?q?Test=20:=20@CsvSource=EB=A5=BC=20?= =?UTF-8?q?=EC=9D=B4=EC=9A=A9=ED=95=9C=20=ED=85=8C=EC=8A=A4=ED=8A=B8?= =?UTF-8?q?=EB=A1=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/CalculatorTest.java | 32 ++++++++++++++------------- src/test/java/ChangToPostfixTest.java | 13 +++++------ 2 files changed, 23 insertions(+), 22 deletions(-) diff --git a/src/test/java/CalculatorTest.java b/src/test/java/CalculatorTest.java index 9874fa8..f9ec1aa 100644 --- a/src/test/java/CalculatorTest.java +++ b/src/test/java/CalculatorTest.java @@ -4,6 +4,8 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.CsvFileSource; +import org.junit.jupiter.params.provider.CsvSource; import org.junit.jupiter.params.provider.ValueSource; public class CalculatorTest { @@ -11,46 +13,46 @@ public class CalculatorTest { @ParameterizedTest @DisplayName("덧셈") - @ValueSource(ints = {1, 10, 100, 1000}) - public void postFixAddCalculate(int expectResult) { + @CsvSource(value = {"'1 2 + 3 +', 6", "'10 20 + 30 +', 60", "'100 200 + 300 +', 600"}) + public void postFixAddCalculate(String expression,int expectResult) { Accumulator postFixAccumulator = new PostFixAccumulator(); - int result = postFixAccumulator.calculate("9 1 90 + +"); + int result = postFixAccumulator.calculate(expression); Assertions.assertEquals(expectResult, result); } @ParameterizedTest @DisplayName("뺼셈") - @ValueSource(ints = {1, 10, 100, 1000}) - public void postFixMinusCalculate(int expectResult) { + @CsvSource(value = {"'1 2 - 3 -', -4", "'10 30 - 20 -', -40", "'300 200 - 1 -', 99"}) + public void postFixMinusCalculate(String expression,int expectResult) { Accumulator postFixAccumulator = new PostFixAccumulator(); - int result = postFixAccumulator.calculate("9 8 -"); + int result = postFixAccumulator.calculate(expression); Assertions.assertEquals(expectResult, result); } @ParameterizedTest @DisplayName("곱셈") - @ValueSource(ints = {1, 10, 100, 1000}) - public void postFixMultiplyCalculate(int expectResult) { + @CsvSource(value = {"'1 2 * 3 *', 6", "'10 20 * 30 *', 6000", "'100 200 * 300 * ', 6000000"}) + public void postFixMultiplyCalculate(String expression,int expectResult) { Accumulator postFixAccumulator = new PostFixAccumulator(); - int result = postFixAccumulator.calculate("10 100 *"); + int result = postFixAccumulator.calculate(expression); Assertions.assertEquals(expectResult, result); } @ParameterizedTest @DisplayName("나눗셈") - @ValueSource(ints = {1, 10, 100, 1000}) - public void postFixDivideCalculate(int expectResult) { + @CsvSource(value = {"'100 10 / 1 /', 10", "'10 2 /', 5", "'10000 20 / 10 /', 50"}) + public void postFixDivideCalculate(String expression,int expectResult) { Accumulator postFixAccumulator = new PostFixAccumulator(); - int result = postFixAccumulator.calculate("100 10 /"); + int result = postFixAccumulator.calculate(expression); Assertions.assertEquals(expectResult, result); } @ParameterizedTest @DisplayName("사칙연산") - @ValueSource(ints = {10, 20, 27}) - public void PostFixCalculate(int expectResult) { + @CsvSource(value = {"'5 3 2 * + 8 4 / -', 9", "'7 4 * 2 / 3 + 1 -', 16", "'9 5 - 2 * 6 3 / +', 10"}) + public void PostFixCalculate(String expression,int expectResult) { PostFixAccumulator calculator = new PostFixAccumulator(); - int result = calculator.calculate("3 4 5 + *"); + int result = calculator.calculate(expression); Assertions.assertEquals(expectResult, result); } diff --git a/src/test/java/ChangToPostfixTest.java b/src/test/java/ChangToPostfixTest.java index 053d739..7229bd8 100644 --- a/src/test/java/ChangToPostfixTest.java +++ b/src/test/java/ChangToPostfixTest.java @@ -1,20 +1,19 @@ import convertor.InfixToPostfixConverter; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.ValueSource; +import org.junit.jupiter.params.provider.CsvSource; public class ChangToPostfixTest { @ParameterizedTest @DisplayName("중위 표기식 후위 표기식 변환") - @ValueSource(strings = {"1 2 3 * + ", "1 + 2 * 3"}) - public void InfixToPostfixTest(String expectResult) { - String input = "1 + 2 * 3"; + @CsvSource(value = {"'7 * 4 / 2 + 3 - 1','7 4 * 2 / 3 + 1 - ' ", + "'9 - 5 * 2 + 6 / 3', '9 5 2 * - 6 3 / + '"}) + public void InfixToPostfixTest(String infixExpression, String postFinExpression) { InfixToPostfixConverter calculator = new InfixToPostfixConverter(); - String value = calculator.changeToPostFix(input); - Assertions.assertEquals(expectResult, value); + String result = calculator.changeToPostFix(infixExpression); + Assertions.assertEquals(postFinExpression, result); } } From 8152b7f8e8d8bb70f49edcf0de5ae3e0bf769dfb Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Sat, 2 Sep 2023 00:23:08 +0900 Subject: [PATCH 77/97] =?UTF-8?q?Test=20:=20=EC=9D=B8=EB=A9=94=EB=AA=A8?= =?UTF-8?q?=EB=A6=AC=20=EC=A0=80=EC=9E=A5=20=ED=85=8C=EC=8A=A4=ED=8A=B8=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/RepositoryTest.java | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 src/test/java/RepositoryTest.java diff --git a/src/test/java/RepositoryTest.java b/src/test/java/RepositoryTest.java new file mode 100644 index 0000000..cbaf03d --- /dev/null +++ b/src/test/java/RepositoryTest.java @@ -0,0 +1,26 @@ +import java.util.LinkedHashMap; +import org.junit.jupiter.api.Assertions; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.CsvSource; +import repository.Repository; + +public class RepositoryTest { + private Repository repository; + + @BeforeEach + public void setup() { + repository = new Repository(); + } + + @ParameterizedTest + @CsvSource({"2 + 3, 5", "4 * 5, 20", "10 / 2, 5"}) + public void testStoreAndGetResult(String expression, String result) { + + repository.store(expression, result); + LinkedHashMap resultMap = repository.getResult(); + + Assertions.assertEquals(result, resultMap.get(expression)); + } +} + From f39924972a984b00277a32ed4c54d454991f91d5 Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Sat, 2 Sep 2023 00:35:35 +0900 Subject: [PATCH 78/97] =?UTF-8?q?Test=20:=20Repository=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EC=8B=9C=20=EC=83=9D=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/RepositoryTest.java | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/src/test/java/RepositoryTest.java b/src/test/java/RepositoryTest.java index cbaf03d..0446a45 100644 --- a/src/test/java/RepositoryTest.java +++ b/src/test/java/RepositoryTest.java @@ -8,19 +8,16 @@ public class RepositoryTest { private Repository repository; - @BeforeEach - public void setup() { - repository = new Repository(); - } @ParameterizedTest @CsvSource({"2 + 3, 5", "4 * 5, 20", "10 / 2, 5"}) public void testStoreAndGetResult(String expression, String result) { - + repository = new Repository(); repository.store(expression, result); LinkedHashMap resultMap = repository.getResult(); Assertions.assertEquals(result, resultMap.get(expression)); } + } From 79a839f18338df59852e405f1c30944b2ab6e670 Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Thu, 7 Sep 2023 16:33:32 +0900 Subject: [PATCH 79/97] =?UTF-8?q?Refactor=20:=20run=20=EB=A9=94=EC=86=8C?= =?UTF-8?q?=EB=93=9C=20static=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/calculator/Calculator.java | 16 ++++++++-------- src/main/java/main.java | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/src/main/java/calculator/Calculator.java b/src/main/java/calculator/Calculator.java index 89f7df4..a8ae8e0 100644 --- a/src/main/java/calculator/Calculator.java +++ b/src/main/java/calculator/Calculator.java @@ -15,17 +15,17 @@ public class Calculator { - private static final int CHECK = 1; - private static final int CALCULATE = 2; - private static SelectValidation selectValidation = new SelectValidation(); + private final int CHECK = 1; + private final int CALCULATE = 2; + private SelectValidation selectValidation = new SelectValidation(); - private static InputView inputView = new ConsoleInputView(); + private InputView inputView = new ConsoleInputView(); - private static ExpressionInputValidation expressionInputValidation = new ExpressionInputValidation(); + private ExpressionInputValidation expressionInputValidation = new ExpressionInputValidation(); - private static Output output = new ConsoleOutput(); + private Output output = new ConsoleOutput(); - public static void run() { + public void run() { Input input = new Input(); while (true) { inputView.displayOptions(); @@ -47,7 +47,7 @@ public static void run() { } } - private static void compute(String expression) { + private void compute(String expression) { if (!expressionInputValidation.checkExpressionValue(expression)) { return; } diff --git a/src/main/java/main.java b/src/main/java/main.java index 9af4644..a2e66fc 100644 --- a/src/main/java/main.java +++ b/src/main/java/main.java @@ -4,6 +4,6 @@ public class main { public static void main(String[] args) { - Calculator.run(); + new Calculator().run(); } } From 1cc812a42be73c1b8d46759df01d5ecf5b0b1807 Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Mon, 11 Sep 2023 16:04:32 +0900 Subject: [PATCH 80/97] =?UTF-8?q?Refactor=20:=20testCase=20delimiter=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/CalculatorTest.java | 23 +++++++++++++---------- src/test/java/ChangToPostfixTest.java | 4 ++-- src/test/java/RepositoryTest.java | 2 +- 3 files changed, 16 insertions(+), 13 deletions(-) diff --git a/src/test/java/CalculatorTest.java b/src/test/java/CalculatorTest.java index f9ec1aa..9b32a21 100644 --- a/src/test/java/CalculatorTest.java +++ b/src/test/java/CalculatorTest.java @@ -13,8 +13,9 @@ public class CalculatorTest { @ParameterizedTest @DisplayName("덧셈") - @CsvSource(value = {"'1 2 + 3 +', 6", "'10 20 + 30 +', 60", "'100 200 + 300 +', 600"}) - public void postFixAddCalculate(String expression,int expectResult) { + @CsvSource(value = {"1 2 + 3 + : 6", "10 20 + 30 + : 60", + "100 200 + 300 + : 600"}, delimiter = ':') + public void postFixAddCalculate(String expression, int expectResult) { Accumulator postFixAccumulator = new PostFixAccumulator(); int result = postFixAccumulator.calculate(expression); Assertions.assertEquals(expectResult, result); @@ -22,8 +23,8 @@ public void postFixAddCalculate(String expression,int expectResult) { @ParameterizedTest @DisplayName("뺼셈") - @CsvSource(value = {"'1 2 - 3 -', -4", "'10 30 - 20 -', -40", "'300 200 - 1 -', 99"}) - public void postFixMinusCalculate(String expression,int expectResult) { + @CsvSource(value = {"1 2 - 3 -: -4", "10 30 - 20 -: -40", "300 200 - 1 - : 99"}, delimiter = ':') + public void postFixMinusCalculate(String expression, int expectResult) { Accumulator postFixAccumulator = new PostFixAccumulator(); int result = postFixAccumulator.calculate(expression); Assertions.assertEquals(expectResult, result); @@ -31,8 +32,9 @@ public void postFixMinusCalculate(String expression,int expectResult) { @ParameterizedTest @DisplayName("곱셈") - @CsvSource(value = {"'1 2 * 3 *', 6", "'10 20 * 30 *', 6000", "'100 200 * 300 * ', 6000000"}) - public void postFixMultiplyCalculate(String expression,int expectResult) { + @CsvSource(value = {"1 2 * 3 *: 6", "10 20 * 30 *: 6000", + "100 200 * 300 * : 6000000"}, delimiter = ':') + public void postFixMultiplyCalculate(String expression, int expectResult) { Accumulator postFixAccumulator = new PostFixAccumulator(); int result = postFixAccumulator.calculate(expression); Assertions.assertEquals(expectResult, result); @@ -40,8 +42,8 @@ public void postFixMultiplyCalculate(String expression,int expectResult) { @ParameterizedTest @DisplayName("나눗셈") - @CsvSource(value = {"'100 10 / 1 /', 10", "'10 2 /', 5", "'10000 20 / 10 /', 50"}) - public void postFixDivideCalculate(String expression,int expectResult) { + @CsvSource(value = {"100 10 / 1 / : 10", "10 2 / : 5", "10000 20 / 10 / : 50"}, delimiter = ':') + public void postFixDivideCalculate(String expression, int expectResult) { Accumulator postFixAccumulator = new PostFixAccumulator(); int result = postFixAccumulator.calculate(expression); Assertions.assertEquals(expectResult, result); @@ -49,8 +51,9 @@ public void postFixDivideCalculate(String expression,int expectResult) { @ParameterizedTest @DisplayName("사칙연산") - @CsvSource(value = {"'5 3 2 * + 8 4 / -', 9", "'7 4 * 2 / 3 + 1 -', 16", "'9 5 - 2 * 6 3 / +', 10"}) - public void PostFixCalculate(String expression,int expectResult) { + @CsvSource(value = {"5 3 2 * + 8 4 / - : 9", "7 4 * 2 / 3 + 1 - : 16", + "9 5 - 2 * 6 3 / +: 10"}, delimiter = ':') + public void PostFixCalculate(String expression, int expectResult) { PostFixAccumulator calculator = new PostFixAccumulator(); int result = calculator.calculate(expression); Assertions.assertEquals(expectResult, result); diff --git a/src/test/java/ChangToPostfixTest.java b/src/test/java/ChangToPostfixTest.java index 7229bd8..c6af154 100644 --- a/src/test/java/ChangToPostfixTest.java +++ b/src/test/java/ChangToPostfixTest.java @@ -8,8 +8,8 @@ public class ChangToPostfixTest { @ParameterizedTest @DisplayName("중위 표기식 후위 표기식 변환") - @CsvSource(value = {"'7 * 4 / 2 + 3 - 1','7 4 * 2 / 3 + 1 - ' ", - "'9 - 5 * 2 + 6 / 3', '9 5 2 * - 6 3 / + '"}) + @CsvSource(value = {"7 * 4 / 2 + 3 - 1 :'7 4 * 2 / 3 + 1 - '", + "9 - 5 * 2 + 6 / 3: '9 5 2 * - 6 3 / + '"},delimiter = ':') public void InfixToPostfixTest(String infixExpression, String postFinExpression) { InfixToPostfixConverter calculator = new InfixToPostfixConverter(); String result = calculator.changeToPostFix(infixExpression); diff --git a/src/test/java/RepositoryTest.java b/src/test/java/RepositoryTest.java index 0446a45..f96d782 100644 --- a/src/test/java/RepositoryTest.java +++ b/src/test/java/RepositoryTest.java @@ -10,7 +10,7 @@ public class RepositoryTest { @ParameterizedTest - @CsvSource({"2 + 3, 5", "4 * 5, 20", "10 / 2, 5"}) + @CsvSource(value = {"2 + 3, 5 : 4 * 5, 20", "10 / 2 : 5"},delimiter = ':') public void testStoreAndGetResult(String expression, String result) { repository = new Repository(); repository.store(expression, result); From 7d1273a1b08d33ba11a83998f47a83a53eb9be80 Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Mon, 11 Sep 2023 17:27:51 +0900 Subject: [PATCH 81/97] =?UTF-8?q?Refactor=20:enum=EC=9D=84=20=EC=9D=B4?= =?UTF-8?q?=EC=9A=A9=ED=95=9C=20=EC=97=B0=EC=82=B0=EC=9E=90=20=EB=B9=84?= =?UTF-8?q?=EA=B5=90=EB=A1=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/accumulator/PostFixAccumulator.java | 15 ++++---- .../convertor/InfixToPostfixConverter.java | 35 ++++++++++--------- src/main/java/operator/Operator.java | 25 +++++++++++++ 3 files changed, 53 insertions(+), 22 deletions(-) create mode 100644 src/main/java/operator/Operator.java diff --git a/src/main/java/accumulator/PostFixAccumulator.java b/src/main/java/accumulator/PostFixAccumulator.java index 5d0d609..83abc50 100644 --- a/src/main/java/accumulator/PostFixAccumulator.java +++ b/src/main/java/accumulator/PostFixAccumulator.java @@ -1,13 +1,16 @@ package accumulator; +import static operator.Operator.*; + import java.util.Stack; +import operator.Operator; public class PostFixAccumulator implements Accumulator { - private static final String PLUS = "+"; - private static final String MINIS = "-"; - private static final String MULTIPLY = "*"; - private static final String DIVIDE = "/"; +// private static final String PLUS = "+"; +// private static final String MINIS = "-"; +// private static final String MULTIPLY = "*"; +// private static final String DIVIDE = "/"; private int firstOperand; private int secondOperand; @@ -16,14 +19,14 @@ public int calculate(String postfixExpression) { Stack result = new Stack<>(); String[] splitPostfixExpression = postfixExpression.split(" "); for (String str : splitPostfixExpression) { - String value = str; + Operator value = stringToOperator(str); switch (value) { case PLUS: firstOperand = result.pop(); secondOperand = result.pop(); result.push(secondOperand + firstOperand); break; - case MINIS: + case MINUS: firstOperand = result.pop(); secondOperand = result.pop(); result.push(secondOperand - firstOperand); diff --git a/src/main/java/convertor/InfixToPostfixConverter.java b/src/main/java/convertor/InfixToPostfixConverter.java index aa6b788..e3a144b 100644 --- a/src/main/java/convertor/InfixToPostfixConverter.java +++ b/src/main/java/convertor/InfixToPostfixConverter.java @@ -2,43 +2,46 @@ import java.util.Arrays; import java.util.Stack; +import operator.Operator; public class InfixToPostfixConverter { private String postfix = ""; public String changeToPostFix(String expression) { - Stack operator = new Stack(); + Stack operatorStack = new Stack(); String[] splitExpression = expression.split(" "); Arrays.stream(splitExpression).forEach(str -> { - String value = str; - int operatorPriority = operatorPriority(value); + Operator operator = Operator.stringToOperator(str); + int operatorPriority = operatorPriority(operator); + int value = Integer.parseInt(str); if (operatorPriority == -1) { postfix += value + " "; - } else if (operator.isEmpty()) { - operator.add((value + " ")); + } else if (operatorStack.isEmpty()) { + operatorStack.add((value + " ")); } else { - while (!operator.isEmpty() - && operatorPriority(operator.peek().substring(0, 1)) >= operatorPriority) { - postfix += operator.pop(); + while (!operatorStack.isEmpty() + && operatorPriority(Operator.stringToOperator(operatorStack.peek().substring(0, 1))) + >= operatorPriority) { + postfix += operatorStack.pop(); } - operator.add((value + " ")); + operatorStack.add((value + " ")); } }); - while (!operator.isEmpty()) { - postfix += operator.pop(); + while (!operatorStack.isEmpty()) { + postfix += operatorStack.pop(); } return postfix; } - public int operatorPriority(String operator) { + public int operatorPriority(Operator operator) { switch (operator) { - case "+": - case "-": + case PLUS: + case MINUS: return 1; - case "*": - case "/": + case MULTIPLY: + case DIVIDE: return 2; } return -1; diff --git a/src/main/java/operator/Operator.java b/src/main/java/operator/Operator.java new file mode 100644 index 0000000..795c869 --- /dev/null +++ b/src/main/java/operator/Operator.java @@ -0,0 +1,25 @@ +package operator; + +public enum Operator { + PLUS("+"), MINUS("-"), DIVIDE("/"), MULTIPLY("*"); + + private final String value; + + Operator(String value) { + this.value = value; + } + + public String getValue() { + return this.value; + } + + public static Operator stringToOperator(String value){ + for(Operator operator: Operator.values()){ + if(operator.getValue().equals(value)) { + return operator; + } + } + throw new IllegalArgumentException("잘못된 입력값 입니다."); + } + +} From 18d1e372ccc47fcf8091867aed78ff4e9205490b Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Mon, 11 Sep 2023 17:41:40 +0900 Subject: [PATCH 82/97] =?UTF-8?q?Refactor:=20PatternValidator=20Util=20?= =?UTF-8?q?=ED=81=B4=EB=9E=98=EC=8A=A4=EB=A5=BC=20=EC=9D=B4=EC=9A=A9?= =?UTF-8?q?=ED=95=9C=20=EC=A0=95=EA=B7=9C=EC=8B=9D=20=EB=A1=9C=EC=A7=81?= =?UTF-8?q?=EC=9C=BC=EB=A1=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/calculator/Calculator.java | 13 ++----- src/main/java/util/PatternValidator.java | 39 +++++++++++++++++++ .../validation/ExpressionInputValidation.java | 23 ----------- .../java/validation/SelectValidation.java | 23 ----------- 4 files changed, 42 insertions(+), 56 deletions(-) create mode 100644 src/main/java/util/PatternValidator.java delete mode 100644 src/main/java/validation/ExpressionInputValidation.java delete mode 100644 src/main/java/validation/SelectValidation.java diff --git a/src/main/java/calculator/Calculator.java b/src/main/java/calculator/Calculator.java index a8ae8e0..42e1f7e 100644 --- a/src/main/java/calculator/Calculator.java +++ b/src/main/java/calculator/Calculator.java @@ -9,19 +9,16 @@ import output.ConsoleOutput; import output.Output; import repository.Repository; -import validation.ExpressionInputValidation; -import validation.SelectValidation; +import util.PatternValidator; public class Calculator { private final int CHECK = 1; private final int CALCULATE = 2; - private SelectValidation selectValidation = new SelectValidation(); private InputView inputView = new ConsoleInputView(); - private ExpressionInputValidation expressionInputValidation = new ExpressionInputValidation(); private Output output = new ConsoleOutput(); @@ -30,9 +27,7 @@ public void run() { while (true) { inputView.displayOptions(); String selectInput = input.selectInput(); - if (!selectValidation.checkSelectValue(selectInput)) { - continue; - } + PatternValidator.checkSelectValue(selectInput); int select = Integer.parseInt(selectInput); switch (select) { case CHECK: @@ -48,9 +43,7 @@ public void run() { } private void compute(String expression) { - if (!expressionInputValidation.checkExpressionValue(expression)) { - return; - } + PatternValidator.checkExpressionValue(expression); InfixToPostfixConverter infixToPostfixConverter = new InfixToPostfixConverter(); String postFixExpression = infixToPostfixConverter.changeToPostFix(expression); Accumulator calculator = new PostFixAccumulator(); diff --git a/src/main/java/util/PatternValidator.java b/src/main/java/util/PatternValidator.java new file mode 100644 index 0000000..d0895c9 --- /dev/null +++ b/src/main/java/util/PatternValidator.java @@ -0,0 +1,39 @@ +package util; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class PatternValidator { + + private static final Pattern EXPRESSIONREGEX = Pattern.compile("^\\d+(?: \\+ \\d+| - \\d+| \\* \\d+| \\/ \\d+)*$"); + + private static final Pattern OPTIONREGEX = Pattern.compile("^[12]+$"); + + private static final Pattern OPERATORREGEX = Pattern.compile("[\\+\\-\\*/]"); + + public static boolean checkExpressionValue(String expression) { + Matcher matcher = EXPRESSIONREGEX.matcher(expression); + if (!matcher.matches()) { + throw new IllegalArgumentException("잘못된 식 입력입니다."); + } + return true; + } + + + public static boolean checkSelectValue(String select) { + Matcher matcher = OPTIONREGEX.matcher(select); + if (!matcher.matches()) { + throw new IllegalArgumentException("잘못된 옵션 선택입니다"); + } + return true; + } + + public static boolean checkOperatorValue(String operator){ + Matcher matcher = OPERATORREGEX.matcher(operator); + if (!matcher.matches()) { + return false; + } + return true; + } + +} diff --git a/src/main/java/validation/ExpressionInputValidation.java b/src/main/java/validation/ExpressionInputValidation.java deleted file mode 100644 index ead930e..0000000 --- a/src/main/java/validation/ExpressionInputValidation.java +++ /dev/null @@ -1,23 +0,0 @@ -package validation; - -import output.ConsoleOutput; -import output.Output; - -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -public class ExpressionInputValidation { - - private final Output output = new ConsoleOutput(); - private final Pattern REGEX = Pattern.compile("^\\d+(?: \\+ \\d+| - \\d+| \\* \\d+| \\/ \\d+)*$"); - - public boolean checkExpressionValue(String expression) { - Matcher matcher = REGEX.matcher(expression); - if (!matcher.matches()) { - output.print("잘못된 형식의 식입니다."); - return false; - } - return true; - } - -} diff --git a/src/main/java/validation/SelectValidation.java b/src/main/java/validation/SelectValidation.java deleted file mode 100644 index 248b89b..0000000 --- a/src/main/java/validation/SelectValidation.java +++ /dev/null @@ -1,23 +0,0 @@ -package validation; - -import output.ConsoleOutput; -import output.Output; - -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -public class SelectValidation { - - private final Output output = new ConsoleOutput(); - private final Pattern REGEX = Pattern.compile("^[12]+$"); - - public boolean checkSelectValue(String select) { - Matcher matcher = REGEX.matcher(select); - if (!matcher.matches()) { - output.print("잘못된 입력값 입니다."); - return false; - } - return true; - } - -} From 0d0ade7e952bc8f21d3e0ff299e5867aa9b7714a Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Mon, 11 Sep 2023 18:50:51 +0900 Subject: [PATCH 83/97] =?UTF-8?q?Refactor=20:=20Pattern.checkOperatorValue?= =?UTF-8?q?=20=EB=A9=94=EC=86=8C=EB=93=9C=20=EC=A0=81=EC=9A=A9=20=EB=B0=8F?= =?UTF-8?q?=20=EB=AA=A8=EB=93=88=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/accumulator/PostFixAccumulator.java | 73 +++++++++++-------- .../convertor/InfixToPostfixConverter.java | 58 ++++++++++----- 2 files changed, 83 insertions(+), 48 deletions(-) diff --git a/src/main/java/accumulator/PostFixAccumulator.java b/src/main/java/accumulator/PostFixAccumulator.java index 83abc50..84eb0cc 100644 --- a/src/main/java/accumulator/PostFixAccumulator.java +++ b/src/main/java/accumulator/PostFixAccumulator.java @@ -4,13 +4,10 @@ import java.util.Stack; import operator.Operator; +import util.PatternValidator; public class PostFixAccumulator implements Accumulator { -// private static final String PLUS = "+"; -// private static final String MINIS = "-"; -// private static final String MULTIPLY = "*"; -// private static final String DIVIDE = "/"; private int firstOperand; private int secondOperand; @@ -19,32 +16,50 @@ public int calculate(String postfixExpression) { Stack result = new Stack<>(); String[] splitPostfixExpression = postfixExpression.split(" "); for (String str : splitPostfixExpression) { - Operator value = stringToOperator(str); - switch (value) { - case PLUS: - firstOperand = result.pop(); - secondOperand = result.pop(); - result.push(secondOperand + firstOperand); - break; - case MINUS: - firstOperand = result.pop(); - secondOperand = result.pop(); - result.push(secondOperand - firstOperand); - break; - case MULTIPLY: - firstOperand = result.pop(); - secondOperand = result.pop(); - result.push(secondOperand * firstOperand); - break; - case DIVIDE: - firstOperand = result.pop(); - secondOperand = result.pop(); - result.push(secondOperand / firstOperand); - break; - default: - result.push(Integer.parseInt(value)); - } + processToken(result, str); } return result.pop(); } + + private void processToken(Stack result, String str) { + if(PatternValidator.checkOperatorValue(str)){ + processOperator(result, str); + } else if (!PatternValidator.checkOperatorValue(str)) { + processOperand(result, str); + } + } + + private void processOperand(Stack result, String str) { + result.push(Integer.parseInt(str)); + } + + private void processOperator(Stack result, String str) { + Operator value = stringToOperator(str); + calculate(result, value); + } + + private void calculate(Stack result, Operator value) { + switch (value) { + case PLUS: + firstOperand = result.pop(); + secondOperand = result.pop(); + result.push(secondOperand + firstOperand); + break; + case MINUS: + firstOperand = result.pop(); + secondOperand = result.pop(); + result.push(secondOperand - firstOperand); + break; + case MULTIPLY: + firstOperand = result.pop(); + secondOperand = result.pop(); + result.push(secondOperand * firstOperand); + break; + case DIVIDE: + firstOperand = result.pop(); + secondOperand = result.pop(); + result.push(secondOperand / firstOperand); + break; + } + } } diff --git a/src/main/java/convertor/InfixToPostfixConverter.java b/src/main/java/convertor/InfixToPostfixConverter.java index e3a144b..b8d701c 100644 --- a/src/main/java/convertor/InfixToPostfixConverter.java +++ b/src/main/java/convertor/InfixToPostfixConverter.java @@ -3,35 +3,55 @@ import java.util.Arrays; import java.util.Stack; import operator.Operator; +import util.PatternValidator; public class InfixToPostfixConverter { - private String postfix = ""; + private StringBuilder postfix = new StringBuilder(); + public String changeToPostFix(String expression) { Stack operatorStack = new Stack(); String[] splitExpression = expression.split(" "); - Arrays.stream(splitExpression).forEach(str -> { - Operator operator = Operator.stringToOperator(str); - int operatorPriority = operatorPriority(operator); - int value = Integer.parseInt(str); - if (operatorPriority == -1) { - postfix += value + " "; - } else if (operatorStack.isEmpty()) { - operatorStack.add((value + " ")); - } else { - while (!operatorStack.isEmpty() - && operatorPriority(Operator.stringToOperator(operatorStack.peek().substring(0, 1))) - >= operatorPriority) { - postfix += operatorStack.pop(); - } - operatorStack.add((value + " ")); - } + Arrays.stream(splitExpression).forEach(token -> { + processToken(operatorStack, token); }); while (!operatorStack.isEmpty()) { - postfix += operatorStack.pop(); + postfix.append(operatorStack.pop()); + } + return postfix.toString(); + } + + private void processToken(Stack operatorStack, String token) { + if (PatternValidator.checkOperatorValue(token)) { + handleOperator(operatorStack, token); + } else if (!PatternValidator.checkOperatorValue(token)) { + handelOperand(token); + } + } + + private void handelOperand(String token) { + int value = Integer.parseInt(token); + postfix.append(value).append(" "); + } + + private void handleOperator(Stack operatorStack, String token) { + Operator currentOperator = Operator.stringToOperator(token); + int currentOperatorPriority = operatorPriority(currentOperator); + setOperatorToOperatorStack(operatorStack, token,currentOperatorPriority); + } + + private void setOperatorToOperatorStack(Stack operatorStack, String token,int currentOperatorPriority) { + compareOperatorPriority(operatorStack,currentOperatorPriority); + operatorStack.add((token + " ")); + } + + private void compareOperatorPriority(Stack operatorStack,int currentOperatorPriority) { + Operator topStackOperator = Operator.stringToOperator(operatorStack.peek().substring(0, 1)); + int topStackOperatorPriority = operatorPriority(topStackOperator); + while (!operatorStack.isEmpty() && topStackOperatorPriority >= currentOperatorPriority) { + postfix.append(operatorStack.pop()); } - return postfix; } From dc51378e56b8b3a5c59f49250503b9e05f6815f9 Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Mon, 11 Sep 2023 20:05:04 +0900 Subject: [PATCH 84/97] =?UTF-8?q?Refactor=20:=20InputView=20OutputView=20?= =?UTF-8?q?=ED=86=B5=ED=95=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/calculator/Calculator.java | 31 +++++++++---------- src/main/java/inputView/ConsoleInputView.java | 14 --------- src/main/java/inputView/InputView.java | 6 ---- src/main/java/output/ConsoleOutput.java | 8 +++++ src/main/java/output/Output.java | 2 +- 5 files changed, 24 insertions(+), 37 deletions(-) delete mode 100644 src/main/java/inputView/ConsoleInputView.java delete mode 100644 src/main/java/inputView/InputView.java diff --git a/src/main/java/calculator/Calculator.java b/src/main/java/calculator/Calculator.java index 42e1f7e..f855e8c 100644 --- a/src/main/java/calculator/Calculator.java +++ b/src/main/java/calculator/Calculator.java @@ -4,8 +4,6 @@ import accumulator.PostFixAccumulator; import convertor.InfixToPostfixConverter; import input.Input; -import inputView.ConsoleInputView; -import inputView.InputView; import output.ConsoleOutput; import output.Output; import repository.Repository; @@ -17,28 +15,29 @@ public class Calculator { private final int CHECK = 1; private final int CALCULATE = 2; - private InputView inputView = new ConsoleInputView(); - - private Output output = new ConsoleOutput(); public void run() { Input input = new Input(); while (true) { - inputView.displayOptions(); + output.displayOptions(); String selectInput = input.selectInput(); PatternValidator.checkSelectValue(selectInput); int select = Integer.parseInt(selectInput); - switch (select) { - case CHECK: - output.printOperationResult(); - break; - - case CALCULATE: - String expression = input.expressionInput(); - compute(expression); - break; - } + selectOptions(input, select); + } + } + + private void selectOptions(Input input, int select) { + switch (select) { + case CHECK: + output.printOperationResult(); + break; + + case CALCULATE: + String expression = input.expressionInput(); + compute(expression); + break; } } diff --git a/src/main/java/inputView/ConsoleInputView.java b/src/main/java/inputView/ConsoleInputView.java deleted file mode 100644 index e325e68..0000000 --- a/src/main/java/inputView/ConsoleInputView.java +++ /dev/null @@ -1,14 +0,0 @@ -package inputView; - - -public class ConsoleInputView implements InputView { - - @Override - public void displayOptions() { - System.out.println("1.조회"); - System.out.println("2.계산"); - System.out.println(); - System.out.print("선택 : "); - } - -} diff --git a/src/main/java/inputView/InputView.java b/src/main/java/inputView/InputView.java deleted file mode 100644 index d975cbc..0000000 --- a/src/main/java/inputView/InputView.java +++ /dev/null @@ -1,6 +0,0 @@ -package inputView; - -public interface InputView { - - void displayOptions(); -} diff --git a/src/main/java/output/ConsoleOutput.java b/src/main/java/output/ConsoleOutput.java index 3bf803b..fc69fea 100644 --- a/src/main/java/output/ConsoleOutput.java +++ b/src/main/java/output/ConsoleOutput.java @@ -23,5 +23,13 @@ public void print(String msg) { System.out.println(msg); } + @Override + public void displayOptions() { + System.out.println("1.조회"); + System.out.println("2.계산"); + System.out.println(); + System.out.print("선택 : "); + } + } diff --git a/src/main/java/output/Output.java b/src/main/java/output/Output.java index 31e47c5..0c8df6f 100644 --- a/src/main/java/output/Output.java +++ b/src/main/java/output/Output.java @@ -10,5 +10,5 @@ public interface Output { public void print(String msg); - + public void displayOptions(); } From 8eadf1beea04af4a403d472cb04099401c7db76b Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Mon, 11 Sep 2023 20:16:30 +0900 Subject: [PATCH 85/97] =?UTF-8?q?feat=20:=20inputInterface=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/calculator/Calculator.java | 10 ++++---- src/main/java/input/ConsoleInput.java | 31 ++++++++++++++++++++++++ src/main/java/input/Input.java | 28 +++------------------ 3 files changed, 39 insertions(+), 30 deletions(-) create mode 100644 src/main/java/input/ConsoleInput.java diff --git a/src/main/java/calculator/Calculator.java b/src/main/java/calculator/Calculator.java index f855e8c..b3255e1 100644 --- a/src/main/java/calculator/Calculator.java +++ b/src/main/java/calculator/Calculator.java @@ -3,7 +3,7 @@ import accumulator.Accumulator; import accumulator.PostFixAccumulator; import convertor.InfixToPostfixConverter; -import input.Input; +import input.ConsoleInput; import output.ConsoleOutput; import output.Output; import repository.Repository; @@ -18,24 +18,24 @@ public class Calculator { private Output output = new ConsoleOutput(); public void run() { - Input input = new Input(); + ConsoleInput input = new ConsoleInput(); while (true) { output.displayOptions(); - String selectInput = input.selectInput(); + String selectInput = input.SelectInput(); PatternValidator.checkSelectValue(selectInput); int select = Integer.parseInt(selectInput); selectOptions(input, select); } } - private void selectOptions(Input input, int select) { + private void selectOptions(ConsoleInput input, int select) { switch (select) { case CHECK: output.printOperationResult(); break; case CALCULATE: - String expression = input.expressionInput(); + String expression = input.ExpressionInput(); compute(expression); break; } diff --git a/src/main/java/input/ConsoleInput.java b/src/main/java/input/ConsoleInput.java new file mode 100644 index 0000000..c0de2c3 --- /dev/null +++ b/src/main/java/input/ConsoleInput.java @@ -0,0 +1,31 @@ +package input; + + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; + +public class ConsoleInput { + + BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); + + public String SelectInput() { + String selectInput = ""; + try { + selectInput = bufferedReader.readLine(); + } catch (IOException e) { + throw new IllegalArgumentException("잘못된 옵션 선택입니다."); + } + return selectInput; + } + + public String ExpressionInput() { + String expressionInput = ""; + try { + expressionInput = bufferedReader.readLine(); + } catch (IOException e) { + throw new IllegalArgumentException("잘못된 식 입력입니다."); + } + return expressionInput; + } +} diff --git a/src/main/java/input/Input.java b/src/main/java/input/Input.java index 7ea11e7..9f5e0bc 100644 --- a/src/main/java/input/Input.java +++ b/src/main/java/input/Input.java @@ -1,31 +1,9 @@ package input; +public interface Input { -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStreamReader; + public String selectInput(); -public class Input { + public String ExpressionInput(); - BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); - - public String selectInput() { - String selectInput = ""; - try { - selectInput = bufferedReader.readLine(); - } catch (IOException e) { - selectInput = ""; - } - return selectInput; - } - - public String expressionInput() { - String expressionInput = ""; - try { - expressionInput = bufferedReader.readLine(); - } catch (IOException e) { - expressionInput = ""; - } - return expressionInput; - } } From 6a09420cbb2ea65cd42f75aed45cc18be65cdd97 Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Mon, 11 Sep 2023 20:27:20 +0900 Subject: [PATCH 86/97] =?UTF-8?q?Refactor=20:=20try=20catch=20=EB=AC=B8?= =?UTF-8?q?=EC=9D=84=20=EC=9D=B4=EC=9A=A9=ED=95=9C=20throw=20Exception=20?= =?UTF-8?q?=EC=B2=98=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/calculator/Calculator.java | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/main/java/calculator/Calculator.java b/src/main/java/calculator/Calculator.java index b3255e1..001445e 100644 --- a/src/main/java/calculator/Calculator.java +++ b/src/main/java/calculator/Calculator.java @@ -20,11 +20,15 @@ public class Calculator { public void run() { ConsoleInput input = new ConsoleInput(); while (true) { - output.displayOptions(); - String selectInput = input.SelectInput(); - PatternValidator.checkSelectValue(selectInput); - int select = Integer.parseInt(selectInput); - selectOptions(input, select); + try { + output.displayOptions(); + String selectInput = input.SelectInput(); + PatternValidator.checkSelectValue(selectInput); + int select = Integer.parseInt(selectInput); + selectOptions(input, select); + }catch (IllegalArgumentException e){ + output.print(e.getMessage()); + } } } From d06b78e9848d3c112c08ef63c211c7c2c0969d3f Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Mon, 11 Sep 2023 20:28:48 +0900 Subject: [PATCH 87/97] =?UTF-8?q?Fix=20:=20=EA=B3=84=EC=82=B0=ED=95=A0?= =?UTF-8?q?=EB=95=8C=20=EB=A7=88=EB=8B=A4=20=EC=A0=80=EC=9E=A5=EC=86=8C=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1=20=EB=AC=B8=EC=A0=9C=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/calculator/Calculator.java | 7 ++++--- src/main/java/repository/Repository.java | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/main/java/calculator/Calculator.java b/src/main/java/calculator/Calculator.java index 001445e..00435cb 100644 --- a/src/main/java/calculator/Calculator.java +++ b/src/main/java/calculator/Calculator.java @@ -17,6 +17,8 @@ public class Calculator { private Output output = new ConsoleOutput(); + private Repository repository = new Repository(); + public void run() { ConsoleInput input = new ConsoleInput(); while (true) { @@ -26,8 +28,8 @@ public void run() { PatternValidator.checkSelectValue(selectInput); int select = Integer.parseInt(selectInput); selectOptions(input, select); - }catch (IllegalArgumentException e){ - output.print(e.getMessage()); + } catch (IllegalArgumentException e) { + output.print(e.getMessage()); } } } @@ -51,7 +53,6 @@ private void compute(String expression) { String postFixExpression = infixToPostfixConverter.changeToPostFix(expression); Accumulator calculator = new PostFixAccumulator(); String result = Integer.toString(calculator.calculate(postFixExpression)); - Repository repository = new Repository(); output.print(result); repository.store(expression, result); } diff --git a/src/main/java/repository/Repository.java b/src/main/java/repository/Repository.java index a6aeb44..c1d5af8 100644 --- a/src/main/java/repository/Repository.java +++ b/src/main/java/repository/Repository.java @@ -4,7 +4,7 @@ public class Repository { - private static LinkedHashMap map = new LinkedHashMap<>(); + private LinkedHashMap map = new LinkedHashMap<>(); public void store(String expression, String result) { map.put(expression, result); From 0a02174f8be84704bf36c7f3d913a3fe299ccbca Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Mon, 11 Sep 2023 20:38:02 +0900 Subject: [PATCH 88/97] =?UTF-8?q?Refactor=20:=20=EC=A0=80=EC=9E=A5?= =?UTF-8?q?=EC=86=8C=20=EC=BB=AC=EB=A0=89=EC=85=98=20=EB=B3=80=EA=B2=BD=20?= =?UTF-8?q?=EB=B0=8F=20Ouput=20Interface=20Repository=20=EC=9D=98=EC=A1=B4?= =?UTF-8?q?=EC=84=B1=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/calculator/Calculator.java | 4 +++- src/main/java/output/ConsoleOutput.java | 15 ++++----------- src/main/java/output/Output.java | 4 ++-- src/main/java/repository/Repository.java | 10 ++++++---- 4 files changed, 15 insertions(+), 18 deletions(-) diff --git a/src/main/java/calculator/Calculator.java b/src/main/java/calculator/Calculator.java index 00435cb..8badac0 100644 --- a/src/main/java/calculator/Calculator.java +++ b/src/main/java/calculator/Calculator.java @@ -4,6 +4,7 @@ import accumulator.PostFixAccumulator; import convertor.InfixToPostfixConverter; import input.ConsoleInput; +import java.util.List; import output.ConsoleOutput; import output.Output; import repository.Repository; @@ -37,7 +38,8 @@ public void run() { private void selectOptions(ConsoleInput input, int select) { switch (select) { case CHECK: - output.printOperationResult(); + List result = repository.getResult(); + output.print(result); break; case CALCULATE: diff --git a/src/main/java/output/ConsoleOutput.java b/src/main/java/output/ConsoleOutput.java index fc69fea..9a2f44f 100644 --- a/src/main/java/output/ConsoleOutput.java +++ b/src/main/java/output/ConsoleOutput.java @@ -1,21 +1,14 @@ package output; -import java.util.LinkedHashMap; -import java.util.Map; + +import java.util.List; public class ConsoleOutput implements Output { @Override - public void printOperationResult() { - LinkedHashMap result = repository.getResult(); - StringBuilder stringBuilder = new StringBuilder(); - for (Map.Entry entry : result.entrySet()) { - String key = entry.getKey(); - String value = entry.getValue(); - stringBuilder.append(key).append(" = ").append(value).append("\n"); - } - System.out.println(stringBuilder); + public void print(List result) { + result.stream().forEach(System.out::println); } @Override diff --git a/src/main/java/output/Output.java b/src/main/java/output/Output.java index 0c8df6f..bcb4b03 100644 --- a/src/main/java/output/Output.java +++ b/src/main/java/output/Output.java @@ -1,12 +1,12 @@ package output; +import java.util.List; import repository.Repository; public interface Output { - public Repository repository = new Repository(); - public void printOperationResult(); + public void print(List result); public void print(String msg); diff --git a/src/main/java/repository/Repository.java b/src/main/java/repository/Repository.java index c1d5af8..d848af2 100644 --- a/src/main/java/repository/Repository.java +++ b/src/main/java/repository/Repository.java @@ -1,18 +1,20 @@ package repository; +import java.util.ArrayList; import java.util.LinkedHashMap; +import java.util.List; public class Repository { - private LinkedHashMap map = new LinkedHashMap<>(); + private List list = new ArrayList<>(); public void store(String expression, String result) { - map.put(expression, result); + list.add(expression + result); } - public LinkedHashMap getResult() { - return map; + public List getResult() { + return list; } } From 6ce85641b4974f5aea87546f08341642ee5e39a9 Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Mon, 11 Sep 2023 21:18:31 +0900 Subject: [PATCH 89/97] =?UTF-8?q?Fix=20:=20stackNullPoint=20=EB=AC=B8?= =?UTF-8?q?=EC=A0=9C=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/convertor/InfixToPostfixConverter.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/main/java/convertor/InfixToPostfixConverter.java b/src/main/java/convertor/InfixToPostfixConverter.java index b8d701c..eac4e66 100644 --- a/src/main/java/convertor/InfixToPostfixConverter.java +++ b/src/main/java/convertor/InfixToPostfixConverter.java @@ -47,9 +47,12 @@ private void setOperatorToOperatorStack(Stack operatorStack, String toke } private void compareOperatorPriority(Stack operatorStack,int currentOperatorPriority) { - Operator topStackOperator = Operator.stringToOperator(operatorStack.peek().substring(0, 1)); - int topStackOperatorPriority = operatorPriority(topStackOperator); - while (!operatorStack.isEmpty() && topStackOperatorPriority >= currentOperatorPriority) { + while (!operatorStack.isEmpty()) { + Operator topStackOperator = Operator.stringToOperator(operatorStack.peek().substring(0, 1)); + int topStackOperatorPriority = operatorPriority(topStackOperator); + if(topStackOperatorPriority < currentOperatorPriority){ + break; + } postfix.append(operatorStack.pop()); } } From e8baa79c211f70f549ba79a31880f406b3e319ff Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Mon, 11 Sep 2023 21:20:57 +0900 Subject: [PATCH 90/97] =?UTF-8?q?Refacor=20:=20=EC=83=81=EC=88=98=EB=AA=85?= =?UTF-8?q?=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/calculator/Calculator.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/calculator/Calculator.java b/src/main/java/calculator/Calculator.java index 8badac0..b8037ff 100644 --- a/src/main/java/calculator/Calculator.java +++ b/src/main/java/calculator/Calculator.java @@ -13,7 +13,7 @@ public class Calculator { - private final int CHECK = 1; + private final int INQUIRY = 1; private final int CALCULATE = 2; private Output output = new ConsoleOutput(); @@ -37,7 +37,7 @@ public void run() { private void selectOptions(ConsoleInput input, int select) { switch (select) { - case CHECK: + case INQUIRY: List result = repository.getResult(); output.print(result); break; From d2292a46d2cdea99ad788b016c8fe39114cf770a Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Mon, 11 Sep 2023 21:21:33 +0900 Subject: [PATCH 91/97] =?UTF-8?q?Test=20:=20=EC=9E=85=EB=A0=A5=EA=B0=92=20?= =?UTF-8?q?=EC=98=88=EC=99=B8=EC=B2=98=EB=A6=AC=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/test/java/ValidationTest.java | 31 ++++++++++++------------------- 1 file changed, 12 insertions(+), 19 deletions(-) diff --git a/src/test/java/ValidationTest.java b/src/test/java/ValidationTest.java index 029c3a8..2d63c55 100644 --- a/src/test/java/ValidationTest.java +++ b/src/test/java/ValidationTest.java @@ -4,8 +4,7 @@ import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; -import validation.ExpressionInputValidation; -import validation.SelectValidation; +import util.PatternValidator; public class ValidationTest { @@ -13,40 +12,34 @@ public class ValidationTest { @DisplayName("옵션 선택 테스트") @ValueSource(strings = {"1", "2"}) public void OptionSelectTest(String selectInput) { - SelectValidation selectValidation = new SelectValidation(); - boolean result = selectValidation.checkSelectValue(selectInput); + boolean result = PatternValidator.checkSelectValue(selectInput); Assertions.assertTrue(result); } @ParameterizedTest @DisplayName("옵션 선택 검증 테스트") - @ValueSource(strings = {"10000","abc","!!@@##"}) + @ValueSource(strings = {"10000", "abc", "!!@@##"}) public void OptionSelectValidationTest(String selectInput) { - ByteArrayOutputStream outputStreamCaptor = new ByteArrayOutputStream(); - System.setOut(new PrintStream(outputStreamCaptor)); - SelectValidation selectValidation = new SelectValidation(); - selectValidation.checkSelectValue(selectInput); - Assertions.assertTrue(outputStreamCaptor.toString().trim().equals("잘못된 입력값 입니다.")); + Assertions.assertThrows(IllegalArgumentException.class, () -> { + PatternValidator.checkSelectValue(selectInput); + }); } @ParameterizedTest @DisplayName("식 입력 테스트") @ValueSource(strings = {"3 + 1 + 2", "1 * 2 / 100 + 2 - 10"}) - public void inputExpressionTest(String expressionInput) { - ExpressionInputValidation expressionInputValidation = new ExpressionInputValidation(); - boolean result = expressionInputValidation.checkExpressionValue(expressionInput); + public void inputExpressionTest(String input) { + boolean result = PatternValidator.checkExpressionValue(input); Assertions.assertTrue(result); } @ParameterizedTest @DisplayName("식 입력 검증 테스트") @ValueSource(strings = {"1*2/100+2-10", "!!@@##"}) - public void inputExpressionValidationTest(String expressionInput) { - ByteArrayOutputStream outputStreamCaptor = new ByteArrayOutputStream(); - System.setOut(new PrintStream(outputStreamCaptor)); - ExpressionInputValidation expressionInputValidation = new ExpressionInputValidation(); - expressionInputValidation.checkExpressionValue(expressionInput); - Assertions.assertTrue(outputStreamCaptor.toString().trim().equals("잘못된 형식의 식입니다.")); + public void inputExpressionValidationTest(String input) { + Assertions.assertThrows(IllegalArgumentException.class, () -> { + PatternValidator.checkExpressionValue(input); + }); } } From f0e3eda86020c8a0118afb630c76bf07f1aa9a23 Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Mon, 11 Sep 2023 21:24:33 +0900 Subject: [PATCH 92/97] =?UTF-8?q?Fix=20:=20=ED=95=A8=EC=88=98=EB=AA=85=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=20=EB=B0=8F=20implements=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/input/ConsoleInput.java | 8 +++++--- src/main/java/input/Input.java | 2 +- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/src/main/java/input/ConsoleInput.java b/src/main/java/input/ConsoleInput.java index c0de2c3..8cf96a8 100644 --- a/src/main/java/input/ConsoleInput.java +++ b/src/main/java/input/ConsoleInput.java @@ -5,11 +5,12 @@ import java.io.IOException; import java.io.InputStreamReader; -public class ConsoleInput { +public class ConsoleInput implements Input { BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); - public String SelectInput() { + @Override + public String selectInput() { String selectInput = ""; try { selectInput = bufferedReader.readLine(); @@ -19,7 +20,8 @@ public String SelectInput() { return selectInput; } - public String ExpressionInput() { + @Override + public String expressionInput() { String expressionInput = ""; try { expressionInput = bufferedReader.readLine(); diff --git a/src/main/java/input/Input.java b/src/main/java/input/Input.java index 9f5e0bc..60c417c 100644 --- a/src/main/java/input/Input.java +++ b/src/main/java/input/Input.java @@ -4,6 +4,6 @@ public interface Input { public String selectInput(); - public String ExpressionInput(); + public String expressionInput(); } From fd87dbc18126f32d65d01041893cc48567cf2939 Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Mon, 11 Sep 2023 21:27:10 +0900 Subject: [PATCH 93/97] =?UTF-8?q?Chore=20:=20=EC=82=AC=EC=9A=A9=ED=95=98?= =?UTF-8?q?=EC=A7=80=20=EC=95=8A=EB=8A=94=20import=20=EC=82=AD=EC=A0=9C=20?= =?UTF-8?q?=EB=B0=8F=20=EC=BB=A8=EB=B2=A4=EC=85=98=EC=97=90=20=EB=A7=9E?= =?UTF-8?q?=EA=B2=8C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/accumulator/PostFixAccumulator.java | 2 +- src/main/java/calculator/Calculator.java | 4 ++-- src/main/java/convertor/InfixToPostfixConverter.java | 11 ++++++----- src/main/java/operator/Operator.java | 6 +++--- src/main/java/output/ConsoleOutput.java | 1 - src/main/java/repository/Repository.java | 1 - src/main/java/util/PatternValidator.java | 11 ++++++----- src/test/java/CalculatorTest.java | 3 --- src/test/java/ChangToPostfixTest.java | 2 +- src/test/java/RepositoryTest.java | 10 +++++----- src/test/java/ValidationTest.java | 2 -- 11 files changed, 24 insertions(+), 29 deletions(-) diff --git a/src/main/java/accumulator/PostFixAccumulator.java b/src/main/java/accumulator/PostFixAccumulator.java index 84eb0cc..14692c2 100644 --- a/src/main/java/accumulator/PostFixAccumulator.java +++ b/src/main/java/accumulator/PostFixAccumulator.java @@ -22,7 +22,7 @@ public int calculate(String postfixExpression) { } private void processToken(Stack result, String str) { - if(PatternValidator.checkOperatorValue(str)){ + if (PatternValidator.checkOperatorValue(str)) { processOperator(result, str); } else if (!PatternValidator.checkOperatorValue(str)) { processOperand(result, str); diff --git a/src/main/java/calculator/Calculator.java b/src/main/java/calculator/Calculator.java index b8037ff..7ccefd3 100644 --- a/src/main/java/calculator/Calculator.java +++ b/src/main/java/calculator/Calculator.java @@ -25,7 +25,7 @@ public void run() { while (true) { try { output.displayOptions(); - String selectInput = input.SelectInput(); + String selectInput = input.selectInput(); PatternValidator.checkSelectValue(selectInput); int select = Integer.parseInt(selectInput); selectOptions(input, select); @@ -43,7 +43,7 @@ private void selectOptions(ConsoleInput input, int select) { break; case CALCULATE: - String expression = input.ExpressionInput(); + String expression = input.expressionInput(); compute(expression); break; } diff --git a/src/main/java/convertor/InfixToPostfixConverter.java b/src/main/java/convertor/InfixToPostfixConverter.java index eac4e66..16c22b3 100644 --- a/src/main/java/convertor/InfixToPostfixConverter.java +++ b/src/main/java/convertor/InfixToPostfixConverter.java @@ -38,19 +38,20 @@ private void handelOperand(String token) { private void handleOperator(Stack operatorStack, String token) { Operator currentOperator = Operator.stringToOperator(token); int currentOperatorPriority = operatorPriority(currentOperator); - setOperatorToOperatorStack(operatorStack, token,currentOperatorPriority); + setOperatorToOperatorStack(operatorStack, token, currentOperatorPriority); } - private void setOperatorToOperatorStack(Stack operatorStack, String token,int currentOperatorPriority) { - compareOperatorPriority(operatorStack,currentOperatorPriority); + private void setOperatorToOperatorStack(Stack operatorStack, String token, + int currentOperatorPriority) { + compareOperatorPriority(operatorStack, currentOperatorPriority); operatorStack.add((token + " ")); } - private void compareOperatorPriority(Stack operatorStack,int currentOperatorPriority) { + private void compareOperatorPriority(Stack operatorStack, int currentOperatorPriority) { while (!operatorStack.isEmpty()) { Operator topStackOperator = Operator.stringToOperator(operatorStack.peek().substring(0, 1)); int topStackOperatorPriority = operatorPriority(topStackOperator); - if(topStackOperatorPriority < currentOperatorPriority){ + if (topStackOperatorPriority < currentOperatorPriority) { break; } postfix.append(operatorStack.pop()); diff --git a/src/main/java/operator/Operator.java b/src/main/java/operator/Operator.java index 795c869..815c9b2 100644 --- a/src/main/java/operator/Operator.java +++ b/src/main/java/operator/Operator.java @@ -13,9 +13,9 @@ public String getValue() { return this.value; } - public static Operator stringToOperator(String value){ - for(Operator operator: Operator.values()){ - if(operator.getValue().equals(value)) { + public static Operator stringToOperator(String value) { + for (Operator operator : Operator.values()) { + if (operator.getValue().equals(value)) { return operator; } } diff --git a/src/main/java/output/ConsoleOutput.java b/src/main/java/output/ConsoleOutput.java index 9a2f44f..111fb30 100644 --- a/src/main/java/output/ConsoleOutput.java +++ b/src/main/java/output/ConsoleOutput.java @@ -1,7 +1,6 @@ package output; - import java.util.List; public class ConsoleOutput implements Output { diff --git a/src/main/java/repository/Repository.java b/src/main/java/repository/Repository.java index d848af2..54666ba 100644 --- a/src/main/java/repository/Repository.java +++ b/src/main/java/repository/Repository.java @@ -1,7 +1,6 @@ package repository; import java.util.ArrayList; -import java.util.LinkedHashMap; import java.util.List; public class Repository { diff --git a/src/main/java/util/PatternValidator.java b/src/main/java/util/PatternValidator.java index d0895c9..fe8754f 100644 --- a/src/main/java/util/PatternValidator.java +++ b/src/main/java/util/PatternValidator.java @@ -5,7 +5,8 @@ public class PatternValidator { - private static final Pattern EXPRESSIONREGEX = Pattern.compile("^\\d+(?: \\+ \\d+| - \\d+| \\* \\d+| \\/ \\d+)*$"); + private static final Pattern EXPRESSIONREGEX = Pattern.compile( + "^\\d+(?: \\+ \\d+| - \\d+| \\* \\d+| \\/ \\d+)*$"); private static final Pattern OPTIONREGEX = Pattern.compile("^[12]+$"); @@ -14,7 +15,7 @@ public class PatternValidator { public static boolean checkExpressionValue(String expression) { Matcher matcher = EXPRESSIONREGEX.matcher(expression); if (!matcher.matches()) { - throw new IllegalArgumentException("잘못된 식 입력입니다."); + throw new IllegalArgumentException("잘못된 식 입력입니다."); } return true; } @@ -23,15 +24,15 @@ public static boolean checkExpressionValue(String expression) { public static boolean checkSelectValue(String select) { Matcher matcher = OPTIONREGEX.matcher(select); if (!matcher.matches()) { - throw new IllegalArgumentException("잘못된 옵션 선택입니다"); + throw new IllegalArgumentException("잘못된 옵션 선택입니다"); } return true; } - public static boolean checkOperatorValue(String operator){ + public static boolean checkOperatorValue(String operator) { Matcher matcher = OPERATORREGEX.matcher(operator); if (!matcher.matches()) { - return false; + return false; } return true; } diff --git a/src/test/java/CalculatorTest.java b/src/test/java/CalculatorTest.java index 9b32a21..2dda79b 100644 --- a/src/test/java/CalculatorTest.java +++ b/src/test/java/CalculatorTest.java @@ -2,11 +2,8 @@ import accumulator.PostFixAccumulator; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.DisplayName; -import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.CsvFileSource; import org.junit.jupiter.params.provider.CsvSource; -import org.junit.jupiter.params.provider.ValueSource; public class CalculatorTest { diff --git a/src/test/java/ChangToPostfixTest.java b/src/test/java/ChangToPostfixTest.java index c6af154..5f3bca3 100644 --- a/src/test/java/ChangToPostfixTest.java +++ b/src/test/java/ChangToPostfixTest.java @@ -9,7 +9,7 @@ public class ChangToPostfixTest { @ParameterizedTest @DisplayName("중위 표기식 후위 표기식 변환") @CsvSource(value = {"7 * 4 / 2 + 3 - 1 :'7 4 * 2 / 3 + 1 - '", - "9 - 5 * 2 + 6 / 3: '9 5 2 * - 6 3 / + '"},delimiter = ':') + "9 - 5 * 2 + 6 / 3: '9 5 2 * - 6 3 / + '"}, delimiter = ':') public void InfixToPostfixTest(String infixExpression, String postFinExpression) { InfixToPostfixConverter calculator = new InfixToPostfixConverter(); String result = calculator.changeToPostFix(infixExpression); diff --git a/src/test/java/RepositoryTest.java b/src/test/java/RepositoryTest.java index f96d782..43d4ed4 100644 --- a/src/test/java/RepositoryTest.java +++ b/src/test/java/RepositoryTest.java @@ -1,22 +1,22 @@ -import java.util.LinkedHashMap; +import java.util.List; import org.junit.jupiter.api.Assertions; -import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.CsvSource; import repository.Repository; public class RepositoryTest { + private Repository repository; @ParameterizedTest - @CsvSource(value = {"2 + 3, 5 : 4 * 5, 20", "10 / 2 : 5"},delimiter = ':') + @CsvSource(value = {"2 + 3, 5 : 4 * 5, 20", "10 / 2 : 5"}, delimiter = ':') public void testStoreAndGetResult(String expression, String result) { repository = new Repository(); repository.store(expression, result); - LinkedHashMap resultMap = repository.getResult(); + List actuallyResult = repository.getResult(); - Assertions.assertEquals(result, resultMap.get(expression)); + Assertions.assertEquals(result, actuallyResult.get(0)); } } diff --git a/src/test/java/ValidationTest.java b/src/test/java/ValidationTest.java index 2d63c55..fe217f7 100644 --- a/src/test/java/ValidationTest.java +++ b/src/test/java/ValidationTest.java @@ -1,5 +1,3 @@ -import java.io.ByteArrayOutputStream; -import java.io.PrintStream; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.params.ParameterizedTest; From 48b595bcd3df1b2c5b20df7a2d4bce6c736f0550 Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Tue, 12 Sep 2023 11:00:37 +0900 Subject: [PATCH 94/97] =?UTF-8?q?Refactor=20:=20coumpute=EB=A9=94=EC=86=8C?= =?UTF-8?q?=EB=93=9C=20=EB=AA=A8=EB=93=88=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/calculator/Calculator.java | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/main/java/calculator/Calculator.java b/src/main/java/calculator/Calculator.java index 7ccefd3..58a9f2f 100644 --- a/src/main/java/calculator/Calculator.java +++ b/src/main/java/calculator/Calculator.java @@ -51,11 +51,21 @@ private void selectOptions(ConsoleInput input, int select) { private void compute(String expression) { PatternValidator.checkExpressionValue(expression); - InfixToPostfixConverter infixToPostfixConverter = new InfixToPostfixConverter(); - String postFixExpression = infixToPostfixConverter.changeToPostFix(expression); - Accumulator calculator = new PostFixAccumulator(); - String result = Integer.toString(calculator.calculate(postFixExpression)); + String postFixExpression = convertToPostfixExpression(expression); + String result = basicOperation(postFixExpression); output.print(result); repository.store(expression, result); } + + private String basicOperation(String postFixExpression) { + Accumulator calculator = new PostFixAccumulator(); + String result = Integer.toString(calculator.calculate(postFixExpression)); + return result; + } + + private String convertToPostfixExpression(String expression) { + InfixToPostfixConverter infixToPostfixConverter = new InfixToPostfixConverter(); + String postFixExpression = infixToPostfixConverter.changeToPostFix(expression); + return postFixExpression; + } } From c1067974bdf3b28935d3c3f4a562816838595351 Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Tue, 12 Sep 2023 11:13:08 +0900 Subject: [PATCH 95/97] =?UTF-8?q?Fix=20:=20=EC=A1=B0=ED=9A=8C=EC=8B=9C=20?= =?UTF-8?q?=EC=B6=9C=EB=A0=A5=20=EA=B2=B0=EA=B3=BC=20=EB=B2=84=EA=B7=B8=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/repository/Repository.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/repository/Repository.java b/src/main/java/repository/Repository.java index 54666ba..974172d 100644 --- a/src/main/java/repository/Repository.java +++ b/src/main/java/repository/Repository.java @@ -8,7 +8,8 @@ public class Repository { private List list = new ArrayList<>(); public void store(String expression, String result) { - list.add(expression + result); + StringBuilder formattedExpression = new StringBuilder(expression).append(" = ").append(result); + list.add(formattedExpression.toString()); } From 6be34439e42341bf4bc2bac078dffb034ca9b8d5 Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Tue, 12 Sep 2023 11:14:41 +0900 Subject: [PATCH 96/97] =?UTF-8?q?refactor=20:=20=EC=A0=91=EA=B7=BC?= =?UTF-8?q?=EC=A7=80=EC=A0=95=EC=9E=90=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/input/ConsoleInput.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/input/ConsoleInput.java b/src/main/java/input/ConsoleInput.java index 8cf96a8..6c65c6d 100644 --- a/src/main/java/input/ConsoleInput.java +++ b/src/main/java/input/ConsoleInput.java @@ -7,7 +7,7 @@ public class ConsoleInput implements Input { - BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); + private BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in)); @Override public String selectInput() { From b2d446550db94d88f82d14c534f73cef4edbb2f4 Mon Sep 17 00:00:00 2001 From: xogns4909 Date: Tue, 12 Sep 2023 11:20:26 +0900 Subject: [PATCH 97/97] =?UTF-8?q?Refactor=20:=20=EC=BB=AC=EB=A0=89?= =?UTF-8?q?=EC=85=98=20=EB=A6=AC=ED=84=B4=EC=8B=9C=20=EC=83=88=20=EB=A6=AC?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EC=83=9D=EC=84=B1=ED=9B=84=20=EB=A6=AC?= =?UTF-8?q?=ED=84=B4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/repository/Repository.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/repository/Repository.java b/src/main/java/repository/Repository.java index 974172d..4ac107a 100644 --- a/src/main/java/repository/Repository.java +++ b/src/main/java/repository/Repository.java @@ -14,7 +14,7 @@ public void store(String expression, String result) { } public List getResult() { - return list; + return new ArrayList<>(list); } }