From bd58dc1b8b3211c84fd7a1454860f9a936701b96 Mon Sep 17 00:00:00 2001 From: whoenykkk Date: Fri, 17 Oct 2025 17:04:33 +0900 Subject: [PATCH 1/5] =?UTF-8?q?docs:=20README.md=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index bd90ef0247..3379a276c3 100644 --- a/README.md +++ b/README.md @@ -1 +1,16 @@ -# java-calculator-precourse \ No newline at end of file +# java-calculator-precourse + +## 기능 요구사항 + +### 1. 입력한 문자열에서 숫자를 추출하여 더하는 계산기 구현 +- 숫자는 양수만 처리 +- 문자열에 있는 숫자를 구분자 기준으로 구분 후 합산 + +### 2. 구분자 처리 +- 쉼표(,)와 콜론(:)을 기본 구분자로 사용 +- 기본 구분자 외에 //와 \n 사이에 위치하는 문자를 커스텀 구분자로 사용 +- 커스텀 구분자는 1개만 지정 가능 + +### 3. 예외 처리 +- 사용자가 잘못된 값을 입력할 경우 IllegalArgumentException 발생 +- 예외 발생 후 애플리케이션 종료 \ No newline at end of file From ca7ee1e086849e36a93b21cd28c5cd70f0bdea47 Mon Sep 17 00:00:00 2001 From: whoenykkk Date: Fri, 17 Oct 2025 17:05:42 +0900 Subject: [PATCH 2/5] =?UTF-8?q?feat:=20=EA=B5=AC=EB=B6=84=EC=9E=90=20?= =?UTF-8?q?=EC=B2=98=EB=A6=AC=20=EA=B8=B0=EB=8A=A5=20=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/Application.java | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/main/java/calculator/Application.java b/src/main/java/calculator/Application.java index 573580fb40..244e6d142e 100644 --- a/src/main/java/calculator/Application.java +++ b/src/main/java/calculator/Application.java @@ -1,7 +1,25 @@ package calculator; +import camp.nextstep.edu.missionutils.Console; +import java.util.regex.Pattern; + public class Application { public static void main(String[] args) { - // TODO: 프로그램 구현 + System.out.println("덧셈할 문자열을 입력해 주세요."); + String input = Console.readLine(); + + System.out.println("결과 : " + calculate(input)); + } + + private static int calculate(String input) { + int result=0; + + String delimiterPattern="[,:]"; + if(input.startsWith("//")){ + int delimiterEndIndex=input.indexOf("\n"); + delimiterPattern=Pattern.quote(input.substring(2,delimiterEndIndex)); + input=input.substring(delimiterEndIndex+1); + } + return result; } } From 5acc64c6f4d8b8ef2a24e78c304941234478ebde Mon Sep 17 00:00:00 2001 From: whoenykkk Date: Fri, 17 Oct 2025 17:19:40 +0900 Subject: [PATCH 3/5] =?UTF-8?q?docs:=20README=20=EC=98=88=EC=99=B8?= =?UTF-8?q?=EC=B2=98=EB=A6=AC=20=ED=95=AD=EB=AA=A9=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index 3379a276c3..b9b93d59c3 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,6 @@ ## 기능 요구사항 ### 1. 입력한 문자열에서 숫자를 추출하여 더하는 계산기 구현 -- 숫자는 양수만 처리 - 문자열에 있는 숫자를 구분자 기준으로 구분 후 합산 ### 2. 구분자 처리 From 6af18a168ef744863c1cd284ca416e279a8ba08b Mon Sep 17 00:00:00 2001 From: whoenykkk Date: Fri, 17 Oct 2025 17:19:48 +0900 Subject: [PATCH 4/5] =?UTF-8?q?feat:=20=EB=AC=B8=EC=9E=90=EC=97=B4=20?= =?UTF-8?q?=EB=8D=A7=EC=85=88=20=EA=B3=84=EC=82=B0=20=EA=B8=B0=EB=8A=A5=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/Application.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/main/java/calculator/Application.java b/src/main/java/calculator/Application.java index 244e6d142e..86e3ab7da4 100644 --- a/src/main/java/calculator/Application.java +++ b/src/main/java/calculator/Application.java @@ -20,6 +20,12 @@ private static int calculate(String input) { delimiterPattern=Pattern.quote(input.substring(2,delimiterEndIndex)); input=input.substring(delimiterEndIndex+1); } + + String [] numbers=input.split(delimiterPattern); + for (String number : numbers) { + result+=Integer.parseInt(number); + } + return result; } } From 0902112100d3edeb6633143c4ceda631fd490341 Mon Sep 17 00:00:00 2001 From: whoenykkk Date: Mon, 20 Oct 2025 23:38:26 +0900 Subject: [PATCH 5/5] =?UTF-8?q?feat:=20=EC=98=88=EC=99=B8=20=EC=B2=98?= =?UTF-8?q?=EB=A6=AC=20=EA=B8=B0=EB=8A=A5=20=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/Application.java | 32 ++++++++++++++++------- 1 file changed, 23 insertions(+), 9 deletions(-) diff --git a/src/main/java/calculator/Application.java b/src/main/java/calculator/Application.java index 86e3ab7da4..54e415073d 100644 --- a/src/main/java/calculator/Application.java +++ b/src/main/java/calculator/Application.java @@ -13,19 +13,33 @@ public static void main(String[] args) { private static int calculate(String input) { int result=0; + String delimiterPattern = "[,:]"; - String delimiterPattern="[,:]"; - if(input.startsWith("//")){ - int delimiterEndIndex=input.indexOf("\n"); - delimiterPattern=Pattern.quote(input.substring(2,delimiterEndIndex)); - input=input.substring(delimiterEndIndex+1); + if (input.startsWith("//")) { + int delimiterEndIndex = input.indexOf("\\n"); + if (delimiterEndIndex == -1) { + throw new IllegalArgumentException(); + } + delimiterPattern = Pattern.quote(input.substring(2, delimiterEndIndex)); + input = input.substring(delimiterEndIndex + 2); } - String [] numbers=input.split(delimiterPattern); - for (String number : numbers) { - result+=Integer.parseInt(number); + if (!input.isEmpty()) { + + String[] numbers = input.split(delimiterPattern); + for (String number : numbers) { + try { + int num = Integer.parseInt(number); + if (num <= 0) { + throw new IllegalArgumentException(); + } + result += num; + } catch (NumberFormatException e) { + throw new IllegalArgumentException(); + } + } } return result; } -} +} \ No newline at end of file