From 05923dc7481b52551a09b2d88a30510795c380af Mon Sep 17 00:00:00 2001 From: picosw Date: Tue, 1 Apr 2025 09:31:44 +0900 Subject: [PATCH 1/6] =?UTF-8?q?[step1]=20=EB=8D=A7=EC=85=88=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/calculator/StringCalculator.java | 29 +++++++++++++++++++ .../java/calculator/StringCalculatorTest.java | 14 +++++++++ 2 files changed, 43 insertions(+) create mode 100644 src/main/java/calculator/StringCalculator.java create mode 100644 src/test/java/calculator/StringCalculatorTest.java diff --git a/src/main/java/calculator/StringCalculator.java b/src/main/java/calculator/StringCalculator.java new file mode 100644 index 00000000000..c50ee839ef7 --- /dev/null +++ b/src/main/java/calculator/StringCalculator.java @@ -0,0 +1,29 @@ +package calculator; + +public class StringCalculator { + + public static int calculate(String input) { + + String[] values = input.split(" "); + String operation; + int result = Integer.parseInt(values[0]); + + for (int i = 1; i < values.length; i++) { + operation = values[i]; + i++; + int number = Integer.parseInt(values[i]); + result = calculate(result, operation, number); + } + + return result; + } + + private static int calculate(int number1, String operation, int number2) { + switch (operation) { + case "+": + return number1 + number2; + default: + throw new IllegalArgumentException("Invalid operation: " + operation); + } + } +} diff --git a/src/test/java/calculator/StringCalculatorTest.java b/src/test/java/calculator/StringCalculatorTest.java new file mode 100644 index 00000000000..265bff93071 --- /dev/null +++ b/src/test/java/calculator/StringCalculatorTest.java @@ -0,0 +1,14 @@ +package calculator; + +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +public class StringCalculatorTest { + + @Test + public void testAdd() { + int result = StringCalculator.calculate("1 + 2 + 3"); + assertThat(result).isEqualTo(6); + } +} From 1ad42e56e12096b448641b2273a422a2414db9f8 Mon Sep 17 00:00:00 2001 From: picosw Date: Tue, 1 Apr 2025 09:33:27 +0900 Subject: [PATCH 2/6] =?UTF-8?q?[step1]=20=EB=BA=84=EC=85=88=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/calculator/StringCalculator.java | 2 ++ src/test/java/calculator/StringCalculatorTest.java | 6 ++++++ 2 files changed, 8 insertions(+) diff --git a/src/main/java/calculator/StringCalculator.java b/src/main/java/calculator/StringCalculator.java index c50ee839ef7..5c69c85e421 100644 --- a/src/main/java/calculator/StringCalculator.java +++ b/src/main/java/calculator/StringCalculator.java @@ -22,6 +22,8 @@ private static int calculate(int number1, String operation, int number2) { switch (operation) { case "+": return number1 + number2; + case "-": + return number1 - number2; default: throw new IllegalArgumentException("Invalid operation: " + operation); } diff --git a/src/test/java/calculator/StringCalculatorTest.java b/src/test/java/calculator/StringCalculatorTest.java index 265bff93071..f976d81e239 100644 --- a/src/test/java/calculator/StringCalculatorTest.java +++ b/src/test/java/calculator/StringCalculatorTest.java @@ -11,4 +11,10 @@ public void testAdd() { int result = StringCalculator.calculate("1 + 2 + 3"); assertThat(result).isEqualTo(6); } + + @Test + public void testSubtract() { + int result = StringCalculator.calculate("10 - 2 - 3"); + assertThat(result).isEqualTo(5); + } } From 0338b16986e80270e3d223de53a1e2c810a6e1ef Mon Sep 17 00:00:00 2001 From: picosw Date: Tue, 1 Apr 2025 09:34:14 +0900 Subject: [PATCH 3/6] =?UTF-8?q?[step1]=20=EA=B3=B1=EC=85=88=20=EA=B5=AC?= =?UTF-8?q?=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/calculator/StringCalculator.java | 2 ++ src/test/java/calculator/StringCalculatorTest.java | 6 ++++++ 2 files changed, 8 insertions(+) diff --git a/src/main/java/calculator/StringCalculator.java b/src/main/java/calculator/StringCalculator.java index 5c69c85e421..cc04053914a 100644 --- a/src/main/java/calculator/StringCalculator.java +++ b/src/main/java/calculator/StringCalculator.java @@ -24,6 +24,8 @@ private static int calculate(int number1, String operation, int number2) { return number1 + number2; case "-": return number1 - number2; + case "*": + return number1 * number2; default: throw new IllegalArgumentException("Invalid operation: " + operation); } diff --git a/src/test/java/calculator/StringCalculatorTest.java b/src/test/java/calculator/StringCalculatorTest.java index f976d81e239..230aa1e384c 100644 --- a/src/test/java/calculator/StringCalculatorTest.java +++ b/src/test/java/calculator/StringCalculatorTest.java @@ -17,4 +17,10 @@ public void testSubtract() { int result = StringCalculator.calculate("10 - 2 - 3"); assertThat(result).isEqualTo(5); } + + @Test + public void testMultiply() { + int result = StringCalculator.calculate("2 * 3 * 4"); + assertThat(result).isEqualTo(24); + } } From a01c5950d67feb9a7fde49bd6ac29ec59c6cd7ba Mon Sep 17 00:00:00 2001 From: picosw Date: Tue, 1 Apr 2025 09:35:31 +0900 Subject: [PATCH 4/6] =?UTF-8?q?[step1]=20=EB=82=98=EB=88=97=EC=85=88=20?= =?UTF-8?q?=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/calculator/StringCalculator.java | 2 ++ src/test/java/calculator/StringCalculatorTest.java | 6 ++++++ 2 files changed, 8 insertions(+) diff --git a/src/main/java/calculator/StringCalculator.java b/src/main/java/calculator/StringCalculator.java index cc04053914a..150eee900a0 100644 --- a/src/main/java/calculator/StringCalculator.java +++ b/src/main/java/calculator/StringCalculator.java @@ -26,6 +26,8 @@ private static int calculate(int number1, String operation, int number2) { return number1 - number2; case "*": return number1 * number2; + case "/": + return number1 / number2; default: throw new IllegalArgumentException("Invalid operation: " + operation); } diff --git a/src/test/java/calculator/StringCalculatorTest.java b/src/test/java/calculator/StringCalculatorTest.java index 230aa1e384c..acb7b2a52cc 100644 --- a/src/test/java/calculator/StringCalculatorTest.java +++ b/src/test/java/calculator/StringCalculatorTest.java @@ -23,4 +23,10 @@ public void testMultiply() { int result = StringCalculator.calculate("2 * 3 * 4"); assertThat(result).isEqualTo(24); } + + @Test + public void testDivide() { + int result = StringCalculator.calculate("10 / 2"); + assertThat(result).isEqualTo(5); + } } From 062984a969b3f16342148357e6b2331edeff49ab Mon Sep 17 00:00:00 2001 From: picosw Date: Tue, 1 Apr 2025 09:48:14 +0900 Subject: [PATCH 5/6] =?UTF-8?q?[step1]=20=EA=B3=B5=EB=B0=B1=20input=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 --- .../java/calculator/StringCalculator.java | 14 ++++++++++++-- .../java/calculator/StringCalculatorTest.java | 19 +++++++++++++++---- 2 files changed, 27 insertions(+), 6 deletions(-) diff --git a/src/main/java/calculator/StringCalculator.java b/src/main/java/calculator/StringCalculator.java index 150eee900a0..f6826cd7b51 100644 --- a/src/main/java/calculator/StringCalculator.java +++ b/src/main/java/calculator/StringCalculator.java @@ -3,13 +3,23 @@ public class StringCalculator { public static int calculate(String input) { + validateNotBlank(input); String[] values = input.split(" "); - String operation; + return calculate(values); + } + + private static void validateNotBlank(String input) { + if (input == null || input.isEmpty()) { + throw new IllegalArgumentException("Input cannot be null or empty"); + } + } + + private static int calculate(String[] values) { int result = Integer.parseInt(values[0]); for (int i = 1; i < values.length; i++) { - operation = values[i]; + String operation = values[i]; i++; int number = Integer.parseInt(values[i]); result = calculate(result, operation, number); diff --git a/src/test/java/calculator/StringCalculatorTest.java b/src/test/java/calculator/StringCalculatorTest.java index acb7b2a52cc..b48e0ea61f8 100644 --- a/src/test/java/calculator/StringCalculatorTest.java +++ b/src/test/java/calculator/StringCalculatorTest.java @@ -1,32 +1,43 @@ package calculator; import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.NullAndEmptySource; import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException; public class StringCalculatorTest { @Test - public void testAdd() { + public void add() { int result = StringCalculator.calculate("1 + 2 + 3"); assertThat(result).isEqualTo(6); } @Test - public void testSubtract() { + public void subtract() { int result = StringCalculator.calculate("10 - 2 - 3"); assertThat(result).isEqualTo(5); } @Test - public void testMultiply() { + public void multiply() { int result = StringCalculator.calculate("2 * 3 * 4"); assertThat(result).isEqualTo(24); } @Test - public void testDivide() { + public void divide() { int result = StringCalculator.calculate("10 / 2"); assertThat(result).isEqualTo(5); } + + @ParameterizedTest + @NullAndEmptySource + public void blankInput(String input) { + assertThatIllegalArgumentException().isThrownBy(() -> StringCalculator.calculate(input)); + } + + } From f0b325b44180a22a3f519415e80d99797e699e1c Mon Sep 17 00:00:00 2001 From: picosw Date: Tue, 1 Apr 2025 09:50:15 +0900 Subject: [PATCH 6/6] =?UTF-8?q?[step1]=20=EC=82=AC=EC=B9=99=EC=97=B0?= =?UTF-8?q?=EC=82=B0=20=EA=B8=B0=ED=98=B8=EA=B0=80=20=EC=95=84=EB=8B=8C=20?= =?UTF-8?q?=EA=B2=BD=EC=9A=B0=20=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/test/java/calculator/StringCalculatorTest.java | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/test/java/calculator/StringCalculatorTest.java b/src/test/java/calculator/StringCalculatorTest.java index b48e0ea61f8..26662f81600 100644 --- a/src/test/java/calculator/StringCalculatorTest.java +++ b/src/test/java/calculator/StringCalculatorTest.java @@ -39,5 +39,8 @@ public void blankInput(String input) { assertThatIllegalArgumentException().isThrownBy(() -> StringCalculator.calculate(input)); } - + @Test + public void invalidOperation() { + assertThatIllegalArgumentException().isThrownBy(() -> StringCalculator.calculate("1 % 2")); + } }