From ffb99c9b23e5536e63936b920c7b964c268be86e Mon Sep 17 00:00:00 2001 From: Shinseojin <02sjin@gmail.com> Date: Thu, 3 Apr 2025 21:47:04 +0900 Subject: [PATCH 1/3] =?UTF-8?q?=EA=B3=84=EC=82=B0=EA=B8=B0=20=EB=A1=9C?= =?UTF-8?q?=EC=A7=81=20=EA=B5=AC=ED=98=84=20=EB=B0=8F=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=ED=86=B5=EA=B3=BC=20ver.1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/calculator/Calculator.java | 13 ------- src/test/java/calculator/ApplicationTest.java | 37 ------------------- 2 files changed, 50 deletions(-) delete mode 100644 src/main/java/calculator/Calculator.java delete mode 100644 src/test/java/calculator/ApplicationTest.java diff --git a/src/main/java/calculator/Calculator.java b/src/main/java/calculator/Calculator.java deleted file mode 100644 index 88e8552..0000000 --- a/src/main/java/calculator/Calculator.java +++ /dev/null @@ -1,13 +0,0 @@ -package calculator; - -/* - 1주차에만 제공되는 예시 코드입니다. - 코드는 그대로 사용해도 되고 수정해도 됩니다. - */ - -public class Calculator { - public int calculate(String input) { - // TODO: 코드 구현 - throw new IllegalArgumentException("아직 구현되지 않았습니다."); - } -} diff --git a/src/test/java/calculator/ApplicationTest.java b/src/test/java/calculator/ApplicationTest.java deleted file mode 100644 index f3e71c7..0000000 --- a/src/test/java/calculator/ApplicationTest.java +++ /dev/null @@ -1,37 +0,0 @@ -package calculator; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.jupiter.api.Assertions.assertThrows; -import org.junit.jupiter.api.Test; - -public class ApplicationTest { - Calculator calculator = new Calculator(); - - @Test - public void 빈_문자열_입력_시_0을_반환한다() { - // 아직 calculate 함수가 구현되지 않은 상태에서 TDD Red Test용 코드 - int result = calculator.calculate(""); - assertThat(result).isEqualTo(0); - } - - @Test - public void 덧셈과_뺄셈만_포함된_수식_계산() { - int result = calculator.calculate("1+2-3"); - assertThat(result).isEqualTo(0); - } - - @Test - public void 곱셈과_덧셈_포함_수식_계산() { - int result = calculator.calculate("2*3+4"); - assertThat(result).isEqualTo(10); - } - - @Test - public void 잘못된_수식_입력_시_예외_발생() { - assertThrows(IllegalArgumentException.class, () -> { - calculator.calculate("1++2"); - }); - } - - // TODO: 테스트 코드 추가 가능합니다. -} From f32aecf1ea7c1ef5fd62962cef47309eb04796ce Mon Sep 17 00:00:00 2001 From: Shinseojin <02sjin@gmail.com> Date: Fri, 4 Apr 2025 22:25:38 +0900 Subject: [PATCH 2/3] =?UTF-8?q?=EA=B8=B0=EB=8A=A5=EA=B5=AC=ED=98=84?= =?UTF-8?q?=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- build.gradle.kts | 2 +- src/main/java/calculator/Calculator.java | 74 +++++++++++++++++++ src/test/java/calculator/ApplicationTest.java | 37 ++++++++++ 3 files changed, 112 insertions(+), 1 deletion(-) create mode 100644 src/main/java/calculator/Calculator.java create mode 100644 src/test/java/calculator/ApplicationTest.java diff --git a/build.gradle.kts b/build.gradle.kts index 8b2eeaf..0df1478 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -17,4 +17,4 @@ dependencies { tasks.test { useJUnitPlatform() -} +} \ No newline at end of file diff --git a/src/main/java/calculator/Calculator.java b/src/main/java/calculator/Calculator.java new file mode 100644 index 0000000..82ea4c4 --- /dev/null +++ b/src/main/java/calculator/Calculator.java @@ -0,0 +1,74 @@ +package calculator; + +import java.util.Scanner; + +public class Calculator { + public static void main(String[] args) { + Scanner sc = new Scanner(System.in); + + System.out.print("계산할 수식을 입력하세요: "); + String input = sc.nextLine(); + + System.out.println("입력된 수식: " + input); + + Calculator c = new Calculator(); + int result = c.calculate(input); + } + + public int calculate(String input) { + int num = 0; + int number = 0; + char operation = ' '; + StringBuilder sb = new StringBuilder(); + + input = input.trim().replaceAll("\\s+", ""); + boolean isValid = input.matches("[0-9]+([+\\-*/][0-9]+)*"); + + if (!isValid) { + throw new IllegalArgumentException("잘못된 수식 형식입니다."); + } + + for (int i = 0; i < input.length(); i++) { + char ch = input.charAt(i); + + if (Character.isDigit(ch)) { + sb.append(ch); + } else if (ch == '+' || ch == '-' || ch == '*' || ch == '/') { + + if (sb.length() == 0) { + System.out.println("숫자 없이 연산자가 들어왔습니다!"); + return 0; + } + + number = Integer.parseInt(sb.toString()); + + if (operation == ' ') { + num = number; + } else if (operation == '+') { + num += number; + } else if (operation == '-') { + num -= number; + } else if (operation == '*') { + num *= number; + } else if (operation == '/') { + num /= number; + } + + sb.setLength(0); + operation = ch; + } + } + + if (sb.length() > 0) { + number = Integer.parseInt(sb.toString()); + + if (operation == '+') num += number; + else if (operation == '-') num -= number; + else if (operation == '*') num *= number; + else if (operation == '/') num /= number; + } + + System.out.println("계산 결과: " + num); + return num; + } +} diff --git a/src/test/java/calculator/ApplicationTest.java b/src/test/java/calculator/ApplicationTest.java new file mode 100644 index 0000000..0f20a55 --- /dev/null +++ b/src/test/java/calculator/ApplicationTest.java @@ -0,0 +1,37 @@ +package calculator; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertThrows; +import org.junit.jupiter.api.Test; + +public class ApplicationTest { + Calculator calculator = new Calculator(); + +// @Test +// public void 빈_문자열_입력_시_0을_반환한다() { +// // 아직 calculate 함수가 구현되지 않은 상태에서 TDD Red Test용 코드 +// int result = calculator.calculate(""); +// assertThat(result).isEqualTo(0); +// } + + @Test + public void 덧셈과_뺄셈만_포함된_수식_계산() { + int result = calculator.calculate("1+2-3"); + assertThat(result).isEqualTo(0); + } + + @Test + public void 곱셈과_덧셈_포함_수식_계산() { + int result = calculator.calculate("2*3+4"); + assertThat(result).isEqualTo(10); + } + + @Test + public void 잘못된_수식_입력_시_예외_발생() { + assertThrows(IllegalArgumentException.class, () -> { + calculator.calculate("1++2"); + }); + } + + // TODO: 테스트 코드 추가 가능합니다. +} From 615dfd690b2a6ab9166f93cd499ffa61af619585 Mon Sep 17 00:00:00 2001 From: Shinseojin <02sjin@gmail.com> Date: Fri, 18 Apr 2025 18:17:49 +0900 Subject: [PATCH 3/3] =?UTF-8?q?Add=20README.md:=20=EA=B3=84=EC=82=B0?= =?UTF-8?q?=EA=B8=B0=20=ED=94=84=EB=A1=9C=EC=A0=9D=ED=8A=B8=20=EC=86=8C?= =?UTF-8?q?=EA=B0=9C=20=EB=B0=8F=20=ED=95=84=EC=88=98=20=EC=9A=94=EA=B5=AC?= =?UTF-8?q?=EC=82=AC=ED=95=AD=20=EC=A0=95=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 36 +++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 22621e3..8631e99 100644 --- a/README.md +++ b/README.md @@ -1 +1,35 @@ -# Calculator +# 자바 계산기 프로젝트 + +이 프로젝트는 멋쟁이사자처럼 스터디에서 진행한 계산기 구현 과제입니다. + +## 기능 요구사항 + +- 문자열로 입력된 수식을 계산합니다 (예: 1+2-3, 2*3+4) +- 사칙연산만 지원하며, 연산자 우선순위는 고려하지 않습니다 +- 공백 입력 시 0을 출력합니다 +- 연속된 연산자 등 잘못된 수식은 예외 처리로 종료합니다 +- 오류 메시지는 명확하게 출력되어야 합니다 + +## 입출력 예시 + +입력: +``` +수식을 입력해 주세요. +2*3+4 +``` + +출력: +``` +결과: 10 +``` + +오류 입력: +``` +수식을 입력해 주세요. +1++2 +[ERROR] 잘못된 수식입니다. 입력 형식을 확인해 주세요. +``` + +## 작성자 + +- 신서진