diff --git a/README.md b/README.md index bd90ef0247..387975a8bb 100644 --- a/README.md +++ b/README.md @@ -1 +1,10 @@ -# java-calculator-precourse \ No newline at end of file +# java-calculator-precourse + +1. 쉼표(,) 또는 콜론(:)을 구분자로 가지는 문자열을 전달하는 경우 구분자를 기준으로 분리한 각 숫자의 합을 반환한다. + 예: "" => 0, "1,2" => 3, "1,2,3" => 6, "1,2:3" => 6 + branch: DelimiterCalculator +2. 앞의 기본 구분자(쉼표, 콜론) 외에 커스텀 구분자를 지정할 수 있다. 커스텀 구분자는 문자열 앞부분의 "//"와 "\n" 사이에 위치하는 문자를 커스텀 구분자로 사용한다. + 예를 들어 "//;\n1;2;3"과 같이 값을 입력할 경우 커스텀 구분자는 세미콜론(;)이며, 결과 값은 6이 반환되어야 한다. + branch: CustomDelimiter +3. 사용자가 잘못된 값을 입력할 경우 IllegalArgumentException을 발생시킨 후 애플리케이션은 종료되어야 한다. + branch: ErrorControl diff --git a/src/main/java/calculator/Application.java b/src/main/java/calculator/Application.java index 573580fb40..eb43f71d20 100644 --- a/src/main/java/calculator/Application.java +++ b/src/main/java/calculator/Application.java @@ -1,7 +1,32 @@ package calculator; +import camp.nextstep.edu.missionutils.Console; + +//1. 쉼표(,) 또는 콜론(:)을 구분자로 가지는 문자열을 전달하는 경우 +// 구분자를 기준으로 분리한 각 숫자의 합을 반환한다. +// 예: "" => 0, "1,2" => 3, "1,2,3" => 6, "1,2:3" => + +//앞의 기본 구분자(쉼표, 콜론) 외에 커스텀 구분자를 지정할 수 있다. +//커스텀 구분자는 문자열 앞부분의 "//"와 "\n" 사이에 위치하는 문자를 커스텀 구분자로 사용한다. +//예를 들어 "//;\n1;2;3"과 같이 값을 입력할 경우 +//커스텀 구분자는 세미콜론(;)이며, 결과 값은 6이 반환되어야 한다. public class Application { public static void main(String[] args) { - // TODO: 프로그램 구현 + System.out.print("입력하세요: "); + String input = Console.readLine(); // 사용자 입력을 Console API로 받기 + + if(input.substring(0, 2).equals("//")){ + if((input.substring(4,5).equals("n")) && (input.substring(3,4).equals("\\"))) { + String delimiter = input.substring(2,3); + String cusInput = input.substring(5); + System.out.println(delimiter); + System.out.println(cusInput); + CustomDelimiterCalculator CustomDelimiterCalculator = new CustomDelimiterCalculator(delimiter,cusInput); + System.out.println("결과: " + CustomDelimiterCalculator.sum); + } + }else{ + DelimiterCalculator DelimiterCalculator = new DelimiterCalculator(input); + System.out.println("결과: " + DelimiterCalculator.sum); + } } } diff --git a/src/main/java/calculator/CustomDelimiterCalculator.java b/src/main/java/calculator/CustomDelimiterCalculator.java new file mode 100644 index 0000000000..664bbeaeed --- /dev/null +++ b/src/main/java/calculator/CustomDelimiterCalculator.java @@ -0,0 +1,23 @@ +package calculator; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class CustomDelimiterCalculator { + public int sum; + + public CustomDelimiterCalculator(String delimiter, String input) { + String[] numbers = input.split(delimiter); + sum = 0; + // 숫자가 아닌 값이 포함되어 있는지 확인 및 합계 계산 + for (String number : numbers) { + try { + int value = Integer.parseInt(number); // 숫자로 변환 시도 + sum += value; // 변환에 성공하면 합계에 더함 + } catch (NumberFormatException e) { + // 변환에 실패하면 IllegalArgumentException 발생 + throw new IllegalArgumentException("Invalid input: " + number); + } + } + } +} \ No newline at end of file diff --git a/src/main/java/calculator/DelimiterCalculator.java b/src/main/java/calculator/DelimiterCalculator.java new file mode 100644 index 0000000000..d5fa370f93 --- /dev/null +++ b/src/main/java/calculator/DelimiterCalculator.java @@ -0,0 +1,25 @@ +package calculator; +//1. 쉼표(,) 또는 콜론(:)을 구분자로 가지는 문자열을 전달하는 경우 +// 구분자를 기준으로 분리한 각 숫자의 합을 반환한다. +// 예: "" => 0, "1,2" => 3, "1,2,3" => 6, "1,2:3" => + +public class DelimiterCalculator { + public int sum; + private String input; + public DelimiterCalculator (String input) { + this.input = input; + + String[] numbers = input.split(",| :"); + sum = 0; + // 숫자가 아닌 값이 포함되어 있는지 확인 및 합계 계산 + for (String number : numbers) { + try { + int value = Integer.parseInt(number); // 숫자로 변환 시도 + sum += value; // 변환에 성공하면 합계에 더함 + } catch (NumberFormatException e) { + // 변환에 실패하면 IllegalArgumentException 발생 + throw new IllegalArgumentException("Invalid input: " + number); + } + } + } +}