From 6f3bdf92ad68f9cd943fac1ffc8479ad11fb2d12 Mon Sep 17 00:00:00 2001 From: Hannana <105469888+hancrysta1@users.noreply.github.com> Date: Mon, 21 Oct 2024 17:12:29 +0900 Subject: [PATCH 01/11] =?UTF-8?q?docs(README.md):=20=ED=94=84=EB=A1=9C?= =?UTF-8?q?=EC=A0=9D=ED=8A=B8=20=EA=B8=B0=EB=8A=A5=20=EB=AA=A9=EB=A1=9D=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 문자열 계산기 주요 기능과 예외 처리 목록을 명세한 README.md 파일을 작성 --- README.md | 42 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index bd90ef024..0ed863b0f 100644 --- a/README.md +++ b/README.md @@ -1 +1,41 @@ -# java-calculator-precourse \ No newline at end of file +## java-calculator-precourse + +# 📝 문자열 계산기 기능 목록 + + +## 🔹 사용자로부터 문자열 입력 받기 +- 프로그램이 시작되면 사용자가 덧셈할 문자열을 입력할 수 있도록 다음과 같은 문구를 출력한다. `덧셈할 문자열을 입력해 주세요.` +- 사용자로부터 구분자와 양수로 구성된 문자열을 입력 받는다. +- 사용자가 빈 문자열을 입력하면 0 을 반환한다. + "" => 0 +- 그 외에도 형태를 벗어나거나 유효하지 않은 값이 입력되면 예외 처리를 수행한다. + + +## 🔹 사용자 입력 문자열 분리하기 with 기본 구분자 +- 기본 구분자 쉼표(,) 또는 콜론(:)을 기준으로 문자열을 분리하고 숫자 추출 + + "1,2:3" => 1 2 3 + + +## 🔹 사용자 입력 문자열 분리하기 with 커스텀 구분자 +- 문자열 앞부분 "//"와 "\n" 사이에 커스텀 구분자를 지정한다. + + "//;\n1;2;3" => 1 2 3 (커스텀 구분자: ;) + + +## 🔹 분리 된 숫자 합산하기 +- 구분자를 기준으로 분리된 숫자들을 합산한 후 결과를 출력한다. + + (입력값) 1 2 3 => (결과) 6 + + +## 🔹 입력 값 IllegalArgumentException 예외 처리하기 +- 사용자가 잘못된 형식의 문자열을 입력할 경우, 유효하지 않은 값은 예외 처리한다. +- 입력값이 숫자와 구분자가 아닌 경우 모두 예외로 처리 +- 단, 공백(빈 문자열)의 경우 예외처리 하지 않고 숫자 0으로 처리 + + "1,,2" => 3 +- 해당 예외가 발생하면 프로그램을 종료한다. + + + From 4a5199be9a7b5da80d06b027549cc03bfa5e4917 Mon Sep 17 00:00:00 2001 From: Hannana Date: Mon, 21 Oct 2024 20:46:53 +0900 Subject: [PATCH 02/11] =?UTF-8?q?feat:=20=EC=82=AC=EC=9A=A9=EC=9E=90?= =?UTF-8?q?=EB=A1=9C=EB=B6=80=ED=84=B0=20=EB=AC=B8=EC=9E=90=EC=97=B4=20?= =?UTF-8?q?=EC=9E=85=EB=A0=A5=20=EB=B0=9B=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/calculator/Application.java | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/main/java/calculator/Application.java b/src/main/java/calculator/Application.java index 573580fb4..7cc3c806f 100644 --- a/src/main/java/calculator/Application.java +++ b/src/main/java/calculator/Application.java @@ -1,7 +1,23 @@ package calculator; +import camp.nextstep.edu.missionutils.Console; + + public class Application { public static void main(String[] args) { - // TODO: 프로그램 구현 + System.out.println("덧셈할 문자열을 입력해 주세요."); + String inputStr = Console.readLine(); + int answer = 0; + if(isNull(inputStr)){ + displayResult(answer); + } + Console.close(); + } + + private static void displayResult(int result) { + System.out.println("결과: " + result); + } + private static boolean isNull(String s) { + return s == null || s.isEmpty(); } } From 6b56480f8ed4407c05ac28b3a6674bf0efc5bb87 Mon Sep 17 00:00:00 2001 From: Hannana Date: Mon, 21 Oct 2024 21:00:03 +0900 Subject: [PATCH 03/11] =?UTF-8?q?feat(split):=20=EC=82=AC=EC=9A=A9?= =?UTF-8?q?=EC=9E=90=20=EC=9E=85=EB=A0=A5=20=EB=AC=B8=EC=9E=90=EC=97=B4=20?= =?UTF-8?q?=EB=B6=84=EB=A6=AC=ED=95=98=EA=B8=B0=20with=20=EA=B8=B0?= =?UTF-8?q?=EB=B3=B8=20=EA=B5=AC=EB=B6=84=EC=9E=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/calculator/Application.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/main/java/calculator/Application.java b/src/main/java/calculator/Application.java index 7cc3c806f..5f6897607 100644 --- a/src/main/java/calculator/Application.java +++ b/src/main/java/calculator/Application.java @@ -5,15 +5,21 @@ public class Application { public static void main(String[] args) { + //사용자로부터 문자열 입력 받기 System.out.println("덧셈할 문자열을 입력해 주세요."); String inputStr = Console.readLine(); int answer = 0; if(isNull(inputStr)){ displayResult(answer); + }else{ + //사용자 입력 문자열 분리하기 with 기본 구분자 + splitBasic(inputStr); } Console.close(); } - + private static String[] splitBasic(String inputStr) { + return inputStr.split(",|:"); + } private static void displayResult(int result) { System.out.println("결과: " + result); } From 35f12305ab504433d2e984bdd50771f2c39ce120 Mon Sep 17 00:00:00 2001 From: Hannana Date: Mon, 21 Oct 2024 21:21:16 +0900 Subject: [PATCH 04/11] =?UTF-8?q?feat(split):=20=EC=82=AC=EC=9A=A9?= =?UTF-8?q?=EC=9E=90=20=EC=9E=85=EB=A0=A5=20=EB=AC=B8=EC=9E=90=EC=97=B4=20?= =?UTF-8?q?=EB=B6=84=EB=A6=AC=ED=95=98=EA=B8=B0=20with=20=EC=BB=A4?= =?UTF-8?q?=EC=8A=A4=ED=85=80=20=EA=B5=AC=EB=B6=84=EC=9E=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/calculator/Application.java | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/main/java/calculator/Application.java b/src/main/java/calculator/Application.java index 5f6897607..4ce58aa89 100644 --- a/src/main/java/calculator/Application.java +++ b/src/main/java/calculator/Application.java @@ -12,11 +12,20 @@ public static void main(String[] args) { if(isNull(inputStr)){ displayResult(answer); }else{ - //사용자 입력 문자열 분리하기 with 기본 구분자 - splitBasic(inputStr); + if (inputStr.startsWith("//")) {//사용자 입력 문자열 분리하기 with 커스텀 구분자 + splitCustom(inputStr); + }else{//사용자 입력 문자열 분리하기 with 기본 구분자 + splitBasic(inputStr); + } } Console.close(); } + private static String[] splitCustom(String inputStr) { + int endDelimeter = inputStr.indexOf("\n"); + String delimiter = inputStr.substring(2, endDelimeter);//\n전까지 커스텀 구분자 지정 + inputStr = inputStr.substring(endDelimeter + 1);//구분자 적용 대상 문자열로 분리 + return inputStr.split(delimiter); + } private static String[] splitBasic(String inputStr) { return inputStr.split(",|:"); } From 574a7fb0b2035a713a6e86ec34682de71e385e59 Mon Sep 17 00:00:00 2001 From: Hannana Date: Mon, 21 Oct 2024 21:52:21 +0900 Subject: [PATCH 05/11] =?UTF-8?q?feat(sum):=20=EB=B6=84=EB=A6=AC=20?= =?UTF-8?q?=EB=90=9C=20=EC=88=AB=EC=9E=90=20=ED=95=A9=EC=82=B0=ED=95=98?= =?UTF-8?q?=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/calculator/Application.java | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/main/java/calculator/Application.java b/src/main/java/calculator/Application.java index 4ce58aa89..6ff9fa753 100644 --- a/src/main/java/calculator/Application.java +++ b/src/main/java/calculator/Application.java @@ -1,7 +1,9 @@ package calculator; - import camp.nextstep.edu.missionutils.Console; +import javax.sound.midi.Soundbank; +import java.sql.SQLOutput; +import java.util.Arrays; public class Application { public static void main(String[] args) { @@ -9,21 +11,28 @@ public static void main(String[] args) { System.out.println("덧셈할 문자열을 입력해 주세요."); String inputStr = Console.readLine(); int answer = 0; + String[] atoms; if(isNull(inputStr)){ displayResult(answer); }else{ if (inputStr.startsWith("//")) {//사용자 입력 문자열 분리하기 with 커스텀 구분자 - splitCustom(inputStr); + atoms = splitCustom(inputStr); + answer = sumNum(atoms); }else{//사용자 입력 문자열 분리하기 with 기본 구분자 - splitBasic(inputStr); + atoms = splitBasic(inputStr); + answer = sumNum(atoms); } + displayResult(answer); } Console.close(); } + private static int sumNum(String[] numbers) { + return Arrays.stream(numbers).mapToInt(Integer::parseInt).sum(); + } private static String[] splitCustom(String inputStr) { - int endDelimeter = inputStr.indexOf("\n"); + int endDelimeter = inputStr.indexOf("\\n");//이스케이프문 \ 포함 String delimiter = inputStr.substring(2, endDelimeter);//\n전까지 커스텀 구분자 지정 - inputStr = inputStr.substring(endDelimeter + 1);//구분자 적용 대상 문자열로 분리 + inputStr = inputStr.substring(endDelimeter + 2);//구분자 적용 대상 문자열로 분리 return inputStr.split(delimiter); } private static String[] splitBasic(String inputStr) { From fe36b127a3be315bf5c27d620f1e1edebb3c3fc3 Mon Sep 17 00:00:00 2001 From: Hannana Date: Mon, 21 Oct 2024 22:05:38 +0900 Subject: [PATCH 06/11] =?UTF-8?q?fix:=20=EB=AC=B8=EC=9E=90=EC=97=B4=20?= =?UTF-8?q?=EB=B6=84=EB=A6=AC=20=EC=8B=9C=20=EB=B9=88=20=EB=AC=B8=EC=9E=90?= =?UTF-8?q?=EC=97=B4=200=EC=9C=BC=EB=A1=9C=20=EC=B9=98=ED=99=98=ED=95=98?= =?UTF-8?q?=EC=97=AC=20=EC=A0=80=EC=9E=A5=ED=95=98=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/calculator/Application.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/main/java/calculator/Application.java b/src/main/java/calculator/Application.java index 6ff9fa753..99b2b128f 100644 --- a/src/main/java/calculator/Application.java +++ b/src/main/java/calculator/Application.java @@ -26,17 +26,21 @@ public static void main(String[] args) { } Console.close(); } - private static int sumNum(String[] numbers) { + private static int sumNum(String[] numbers) {//분리 된 숫자 합산하기 return Arrays.stream(numbers).mapToInt(Integer::parseInt).sum(); } private static String[] splitCustom(String inputStr) { int endDelimeter = inputStr.indexOf("\\n");//이스케이프문 \ 포함 String delimiter = inputStr.substring(2, endDelimeter);//\n전까지 커스텀 구분자 지정 inputStr = inputStr.substring(endDelimeter + 2);//구분자 적용 대상 문자열로 분리 - return inputStr.split(delimiter); + return Arrays.stream(inputStr.split(delimiter)) + .map(s -> isNull(s) ? "0" : s) // null 또는 빈 문자열이면 "0"으로 변환 + .toArray(String[]::new); } private static String[] splitBasic(String inputStr) { - return inputStr.split(",|:"); + return Arrays.stream(inputStr.split(",|:")) + .map(s -> isNull(s) ? "0" : s) // null 또는 빈 문자열이면 "0"으로 변환 + .toArray(String[]::new); } private static void displayResult(int result) { System.out.println("결과: " + result); From 1140040440e69058302a6b1f4f40f5eda1e6efd2 Mon Sep 17 00:00:00 2001 From: Hannana Date: Mon, 21 Oct 2024 22:27:32 +0900 Subject: [PATCH 07/11] =?UTF-8?q?feat(Exception):=20=EC=9E=85=EB=A0=A5=20?= =?UTF-8?q?=EA=B0=92=20IllegalArgumentException=20=EC=98=88=EC=99=B8=20?= =?UTF-8?q?=EC=B2=98=EB=A6=AC=ED=95=98=EA=B8=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/calculator/Application.java | 34 +++++++++++++++-------- 1 file changed, 22 insertions(+), 12 deletions(-) diff --git a/src/main/java/calculator/Application.java b/src/main/java/calculator/Application.java index 99b2b128f..313a3de47 100644 --- a/src/main/java/calculator/Application.java +++ b/src/main/java/calculator/Application.java @@ -12,29 +12,39 @@ public static void main(String[] args) { String inputStr = Console.readLine(); int answer = 0; String[] atoms; - if(isNull(inputStr)){ - displayResult(answer); - }else{ - if (inputStr.startsWith("//")) {//사용자 입력 문자열 분리하기 with 커스텀 구분자 - atoms = splitCustom(inputStr); - answer = sumNum(atoms); - }else{//사용자 입력 문자열 분리하기 with 기본 구분자 - atoms = splitBasic(inputStr); - answer = sumNum(atoms); + try { + if (isNull(inputStr)) {//빈 문자열이 입력될 경우 + displayResult(answer); + } else { + if (inputStr.startsWith("//")) { // 사용자 입력 문자열 분리하기 with 커스텀 구분자 + atoms = splitCustom(inputStr); + answer = sumNum(atoms); + } else { // 사용자 입력 문자열 분리하기 with 기본 구분자 + atoms = splitBasic(inputStr); + answer = sumNum(atoms); + } + displayResult(answer); } - displayResult(answer); + } catch (IllegalArgumentException e) { + System.out.println(e.getMessage()); // 예외 메시지 출력 } Console.close(); } private static int sumNum(String[] numbers) {//분리 된 숫자 합산하기 - return Arrays.stream(numbers).mapToInt(Integer::parseInt).sum(); + return Arrays.stream(numbers).mapToInt(num -> { + try { + return Integer.parseInt(num); //예외: 숫자가 아닌 값이면 예외 발생(IllegalArgumentException) + } catch (NumberFormatException e) { + throw new IllegalArgumentException("숫자나 지정된 구분자가 아닌 값이 포함되어 있습니다: " + num); + } + }).sum(); } private static String[] splitCustom(String inputStr) { int endDelimeter = inputStr.indexOf("\\n");//이스케이프문 \ 포함 String delimiter = inputStr.substring(2, endDelimeter);//\n전까지 커스텀 구분자 지정 inputStr = inputStr.substring(endDelimeter + 2);//구분자 적용 대상 문자열로 분리 return Arrays.stream(inputStr.split(delimiter)) - .map(s -> isNull(s) ? "0" : s) // null 또는 빈 문자열이면 "0"으로 변환 + .map(s -> isNull(s) ? "0" : s) //예외: null 또는 빈 문자열이면 "0"으로 변환 .toArray(String[]::new); } private static String[] splitBasic(String inputStr) { From 7f173f84a7a98b1d18e946eced77baa9a4c45970 Mon Sep 17 00:00:00 2001 From: Hannana Date: Mon, 21 Oct 2024 23:19:17 +0900 Subject: [PATCH 08/11] =?UTF-8?q?fix:=20splitString()=ED=95=A8=EC=88=98=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/calculator/Application.java | 49 +++++++++++------------ 1 file changed, 23 insertions(+), 26 deletions(-) diff --git a/src/main/java/calculator/Application.java b/src/main/java/calculator/Application.java index 313a3de47..c026cd397 100644 --- a/src/main/java/calculator/Application.java +++ b/src/main/java/calculator/Application.java @@ -1,8 +1,5 @@ package calculator; import camp.nextstep.edu.missionutils.Console; - -import javax.sound.midi.Soundbank; -import java.sql.SQLOutput; import java.util.Arrays; public class Application { @@ -10,25 +7,18 @@ public static void main(String[] args) { //사용자로부터 문자열 입력 받기 System.out.println("덧셈할 문자열을 입력해 주세요."); String inputStr = Console.readLine(); - int answer = 0; - String[] atoms; try { - if (isNull(inputStr)) {//빈 문자열이 입력될 경우 - displayResult(answer); - } else { - if (inputStr.startsWith("//")) { // 사용자 입력 문자열 분리하기 with 커스텀 구분자 - atoms = splitCustom(inputStr); - answer = sumNum(atoms); - } else { // 사용자 입력 문자열 분리하기 with 기본 구분자 - atoms = splitBasic(inputStr); - answer = sumNum(atoms); - } - displayResult(answer); - } + int answer = isNull(inputStr) ? 0 : processInput(inputStr); + displayResult(answer); } catch (IllegalArgumentException e) { - System.out.println(e.getMessage()); // 예외 메시지 출력 + System.out.println(e.getMessage()); + } finally { + Console.close(); } - Console.close(); + } + private static int processInput(String inputStr) { + String[] atoms = inputStr.startsWith("//") ? splitCustom(inputStr) : splitBasic(inputStr); + return sumNum(atoms); } private static int sumNum(String[] numbers) {//분리 된 숫자 합산하기 return Arrays.stream(numbers).mapToInt(num -> { @@ -40,15 +30,22 @@ private static int sumNum(String[] numbers) {//분리 된 숫자 합산하기 }).sum(); } private static String[] splitCustom(String inputStr) { - int endDelimeter = inputStr.indexOf("\\n");//이스케이프문 \ 포함 - String delimiter = inputStr.substring(2, endDelimeter);//\n전까지 커스텀 구분자 지정 - inputStr = inputStr.substring(endDelimeter + 2);//구분자 적용 대상 문자열로 분리 - return Arrays.stream(inputStr.split(delimiter)) - .map(s -> isNull(s) ? "0" : s) //예외: null 또는 빈 문자열이면 "0"으로 변환 - .toArray(String[]::new); + int endDelimiter = inputStr.indexOf("\\n"); + if (endDelimiter == -1) { + throw new IllegalArgumentException("잘못된 형식입니다. \\n이 없습니다."); + } + + String delimiter = inputStr.substring(2, endDelimiter); // \n 전까지 커스텀 구분자 지정 + inputStr = inputStr.substring(endDelimiter + 2); // 구분자 적용 대상 문자열로 분리 + + return splitString(inputStr, delimiter); } private static String[] splitBasic(String inputStr) { - return Arrays.stream(inputStr.split(",|:")) + return splitString(inputStr, ",|:"); // 기본 구분자 콤마(,) 또는 콜론(:) + } + // 문자열을 구분자로 분리하고 빈 문자열을 0으로 처리 + private static String[] splitString(String inputStr, String delimiter) { + return Arrays.stream(inputStr.split(delimiter)) .map(s -> isNull(s) ? "0" : s) // null 또는 빈 문자열이면 "0"으로 변환 .toArray(String[]::new); } From 45b5b1773104dd9e4afe5485d83ed99f980f77af Mon Sep 17 00:00:00 2001 From: Hannana Date: Mon, 21 Oct 2024 23:48:49 +0900 Subject: [PATCH 09/11] =?UTF-8?q?fix:=20=EC=98=88=EC=99=B8=EC=B2=98?= =?UTF-8?q?=EB=A6=AC=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/Application.java | 50 ++++++++++++----------- 1 file changed, 27 insertions(+), 23 deletions(-) diff --git a/src/main/java/calculator/Application.java b/src/main/java/calculator/Application.java index c026cd397..bca3e3b4a 100644 --- a/src/main/java/calculator/Application.java +++ b/src/main/java/calculator/Application.java @@ -1,57 +1,61 @@ package calculator; + import camp.nextstep.edu.missionutils.Console; import java.util.Arrays; public class Application { public static void main(String[] args) { - //사용자로부터 문자열 입력 받기 System.out.println("덧셈할 문자열을 입력해 주세요."); String inputStr = Console.readLine(); + try { - int answer = isNull(inputStr) ? 0 : processInput(inputStr); - displayResult(answer); + displayResult(isNull(inputStr) ? 0 : sumNum(splitInput(inputStr))); } catch (IllegalArgumentException e) { System.out.println(e.getMessage()); } finally { Console.close(); } } - private static int processInput(String inputStr) { - String[] atoms = inputStr.startsWith("//") ? splitCustom(inputStr) : splitBasic(inputStr); - return sumNum(atoms); + + // 입력 문자열을 처리하고 합산 결과 반환 + private static String[] splitInput(String inputStr) { + if (inputStr.startsWith("//")) { + String delimiter = inputStr.substring(2, inputStr.indexOf("\\n")); + inputStr = inputStr.substring(inputStr.indexOf("\\n") + 2); + return splitString(inputStr, delimiter); + } + return splitString(inputStr, ",|:"); } - private static int sumNum(String[] numbers) {//분리 된 숫자 합산하기 + + // 분리된 문자열 합산 + private static int sumNum(String[] numbers) { return Arrays.stream(numbers).mapToInt(num -> { try { - return Integer.parseInt(num); //예외: 숫자가 아닌 값이면 예외 발생(IllegalArgumentException) + int intNum = Integer.parseInt(num); + if (intNum < 0) { + throw new IllegalArgumentException(); + } + return intNum; } catch (NumberFormatException e) { - throw new IllegalArgumentException("숫자나 지정된 구분자가 아닌 값이 포함되어 있습니다: " + num); + throw new IllegalArgumentException(); } }).sum(); } - private static String[] splitCustom(String inputStr) { - int endDelimiter = inputStr.indexOf("\\n"); - if (endDelimiter == -1) { - throw new IllegalArgumentException("잘못된 형식입니다. \\n이 없습니다."); - } - String delimiter = inputStr.substring(2, endDelimiter); // \n 전까지 커스텀 구분자 지정 - inputStr = inputStr.substring(endDelimiter + 2); // 구분자 적용 대상 문자열로 분리 - return splitString(inputStr, delimiter); - } - private static String[] splitBasic(String inputStr) { - return splitString(inputStr, ",|:"); // 기본 구분자 콤마(,) 또는 콜론(:) - } - // 문자열을 구분자로 분리하고 빈 문자열을 0으로 처리 + // 문자열을 구분자로 분리하고 빈 문자열을 무시 private static String[] splitString(String inputStr, String delimiter) { return Arrays.stream(inputStr.split(delimiter)) - .map(s -> isNull(s) ? "0" : s) // null 또는 빈 문자열이면 "0"으로 변환 + .filter(s -> !isNull(s)) // 빈 문자열 무시 .toArray(String[]::new); } + + // 결과 출력 private static void displayResult(int result) { System.out.println("결과: " + result); } + + // 문자열이 null 또는 빈 문자열인지 확인 private static boolean isNull(String s) { return s == null || s.isEmpty(); } From 284ac8f65c4c4236ce9acd39342c8989c4d1fc94 Mon Sep 17 00:00:00 2001 From: Hannana Date: Mon, 21 Oct 2024 23:57:33 +0900 Subject: [PATCH 10/11] =?UTF-8?q?fix:=20=EA=B5=AC=EB=B6=84=EC=9E=90=20?= =?UTF-8?q?=EB=B6=80=EB=B6=84=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/Application.java | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/main/java/calculator/Application.java b/src/main/java/calculator/Application.java index bca3e3b4a..cf9bde8c5 100644 --- a/src/main/java/calculator/Application.java +++ b/src/main/java/calculator/Application.java @@ -11,7 +11,7 @@ public static void main(String[] args) { try { displayResult(isNull(inputStr) ? 0 : sumNum(splitInput(inputStr))); } catch (IllegalArgumentException e) { - System.out.println(e.getMessage()); + System.out.println("에러: " + e.getMessage()); // 구체적인 에러 메시지 출력 } finally { Console.close(); } @@ -20,11 +20,12 @@ public static void main(String[] args) { // 입력 문자열을 처리하고 합산 결과 반환 private static String[] splitInput(String inputStr) { if (inputStr.startsWith("//")) { - String delimiter = inputStr.substring(2, inputStr.indexOf("\\n")); - inputStr = inputStr.substring(inputStr.indexOf("\\n") + 2); + // "\n"으로 개행 문자 처리 + String delimiter = inputStr.substring(2, inputStr.indexOf("\n")); + inputStr = inputStr.substring(inputStr.indexOf("\n") + 1); return splitString(inputStr, delimiter); } - return splitString(inputStr, ",|:"); + return splitString(inputStr, ",|:"); // 기본 구분자 처리 } // 분리된 문자열 합산 @@ -33,16 +34,15 @@ private static int sumNum(String[] numbers) { try { int intNum = Integer.parseInt(num); if (intNum < 0) { - throw new IllegalArgumentException(); + throw new IllegalArgumentException("음수는 입력할 수 없습니다: " + num); } return intNum; } catch (NumberFormatException e) { - throw new IllegalArgumentException(); + throw new IllegalArgumentException("잘못된 숫자 형식입니다: " + num); } }).sum(); } - // 문자열을 구분자로 분리하고 빈 문자열을 무시 private static String[] splitString(String inputStr, String delimiter) { return Arrays.stream(inputStr.split(delimiter)) From f39d34236217e62cc15315d236d6083ff97a32de Mon Sep 17 00:00:00 2001 From: Hannana Date: Tue, 22 Oct 2024 00:01:29 +0900 Subject: [PATCH 11/11] =?UTF-8?q?fix:=20=EA=B5=AC=EB=B6=84=EC=9E=90=20?= =?UTF-8?q?=EB=B6=80=EB=B6=84=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/Application.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/calculator/Application.java b/src/main/java/calculator/Application.java index cf9bde8c5..6ff74c890 100644 --- a/src/main/java/calculator/Application.java +++ b/src/main/java/calculator/Application.java @@ -21,8 +21,8 @@ public static void main(String[] args) { private static String[] splitInput(String inputStr) { if (inputStr.startsWith("//")) { // "\n"으로 개행 문자 처리 - String delimiter = inputStr.substring(2, inputStr.indexOf("\n")); - inputStr = inputStr.substring(inputStr.indexOf("\n") + 1); + String delimiter = inputStr.substring(2, inputStr.indexOf("\\n")); + inputStr = inputStr.substring(inputStr.indexOf("\\n") + 2); return splitString(inputStr, delimiter); } return splitString(inputStr, ",|:"); // 기본 구분자 처리 @@ -34,11 +34,11 @@ private static int sumNum(String[] numbers) { try { int intNum = Integer.parseInt(num); if (intNum < 0) { - throw new IllegalArgumentException("음수는 입력할 수 없습니다: " + num); + throw new IllegalArgumentException(); } return intNum; } catch (NumberFormatException e) { - throw new IllegalArgumentException("잘못된 숫자 형식입니다: " + num); + throw new IllegalArgumentException(); } }).sum(); }