diff --git a/README.md b/README.md index bd90ef0247..0ed863b0fe 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 +- ํ•ด๋‹น ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ํ”„๋กœ๊ทธ๋žจ์„ ์ข…๋ฃŒํ•œ๋‹ค. + + + diff --git a/src/main/java/calculator/Application.java b/src/main/java/calculator/Application.java index 573580fb40..6ff74c8901 100644 --- a/src/main/java/calculator/Application.java +++ b/src/main/java/calculator/Application.java @@ -1,7 +1,62 @@ package calculator; +import camp.nextstep.edu.missionutils.Console; +import java.util.Arrays; + public class Application { public static void main(String[] args) { - // TODO: ํ”„๋กœ๊ทธ๋žจ ๊ตฌํ˜„ + System.out.println("๋ง์…ˆํ•  ๋ฌธ์ž์—ด์„ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”."); + String inputStr = Console.readLine(); + + try { + displayResult(isNull(inputStr) ? 0 : sumNum(splitInput(inputStr))); + } catch (IllegalArgumentException e) { + System.out.println("์—๋Ÿฌ: " + e.getMessage()); // ๊ตฌ์ฒด์ ์ธ ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ ์ถœ๋ ฅ + } finally { + Console.close(); + } + } + + // ์ž…๋ ฅ ๋ฌธ์ž์—ด์„ ์ฒ˜๋ฆฌํ•˜๊ณ  ํ•ฉ์‚ฐ ๊ฒฐ๊ณผ ๋ฐ˜ํ™˜ + private static String[] splitInput(String inputStr) { + if (inputStr.startsWith("//")) { + // "\n"์œผ๋กœ ๊ฐœํ–‰ ๋ฌธ์ž ์ฒ˜๋ฆฌ + 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) { + return Arrays.stream(numbers).mapToInt(num -> { + try { + int intNum = Integer.parseInt(num); + if (intNum < 0) { + throw new IllegalArgumentException(); + } + return intNum; + } catch (NumberFormatException e) { + throw new IllegalArgumentException(); + } + }).sum(); + } + + // ๋ฌธ์ž์—ด์„ ๊ตฌ๋ถ„์ž๋กœ ๋ถ„๋ฆฌํ•˜๊ณ  ๋นˆ ๋ฌธ์ž์—ด์„ ๋ฌด์‹œ + private static String[] splitString(String inputStr, String delimiter) { + return Arrays.stream(inputStr.split(delimiter)) + .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(); } }