diff --git a/README.md b/README.md index bd90ef0247..d169058717 100644 --- a/README.md +++ b/README.md @@ -1 +1,32 @@ -# java-calculator-precourse \ No newline at end of file +# java-calculator-precourse + +# 문자열 덧셈 계산기 + +### 기능 +1. 입력된 문자열에서 숫자를 빼온 후 합을 반환합니다. +2. 쉼표 또는 콜론을 구분자로 가지는 문자열을 구분자로 분리한 후 계산합니다. +3. 커스텀 구분자도 지원합니다. 커스텀 구분자는 문자열 앞부분의 `//`와 `\n` 사이에 위치하는 문자를 사용합니다. + - 예시: `"//;\n1;2;3"` => 6 +4. 잘못된 값이 입력되면 `IllegalArgumentException`을 발생시킵니다. + +## 기능 목록 +1. 입력된 문자열을 처리하여 숫자의 합을 구하는 메서드 구현 +2. 쉼표(`,`)와 콜론(`:`)을 기본 구분자로 사용하여 숫자를 분리하는 기능 구현 +3. 커스텀 구분자를 처리하여 숫자를 분리하는 기능 구현 +4. 빈 문자열 또는 `null` 입력 시 0을 반환하는 기능 구현 +5. 음수가 입력될 경우 `IllegalArgumentException`을 발생시키는 기능 구현 +6. 모든 테스트가 성공적으로 통과하는지 확인 + +## 구현 방법 +1. **입력 문자열 처리**: 입력 문자열을 분석하여 구분자를 기준으로 숫자를 추출합니다. +2. **숫자 합계 계산**: 추출된 숫자들을 더하여 결과를 반환합니다. +3. **예외 처리**: 잘못된 입력값(음수 또는 유효하지 않은 형식)이 들어오면 예외를 발생시킵니다. + +## 커밋 메시지 규칙 +`AngularJS Git Commit Message Conventions`에 따라 커밋 메시지를 작성합니다. +- **feat**: 새로운 기능 추가 +- **fix**: 버그 수정 +- **refactor**: 코드 리팩토링 +- **test**: 테스트 코드 추가 + +**** \ No newline at end of file diff --git a/src/main/java/calculator/Application.java b/src/main/java/calculator/Application.java index 573580fb40..f90cc77ea1 100644 --- a/src/main/java/calculator/Application.java +++ b/src/main/java/calculator/Application.java @@ -1,7 +1,61 @@ package calculator; +import java.util.List; + +import static camp.nextstep.edu.missionutils.Console.readLine; + public class Application { + // 메인 메서드: 프로그램의 시작점 public static void main(String[] args) { - // TODO: 프로그램 구현 + System.out.println("덧셈할 문자열을 입력해 주세요."); + String input = readLine(); // 사용자 입력 받기 + try { + int result = addNumbers(input); // 계산 결과 + System.out.println("결과 : " + result); // 출력 + } catch (IllegalArgumentException e) { + System.out.println(e.getMessage()); // 예외 발생 시 메시지 출력 + } + } + + private static int addNumbers(String input) { + if (input.isEmpty()) { + return 0; + } + + String delimiter = ",|:"; // 기본 구분자 설정 + if (input.startsWith("//")) { // 커스텀 구분자 처리 + int newlineIndex = input.indexOf("\n"); + if (newlineIndex == -1) { + throw new IllegalArgumentException("잘못된 입력입니다."); // '\n'이 없으면 예외 발생 + } + delimiter = input.substring(2, newlineIndex); // 커스텀 구분자 추출 + input = input.substring(newlineIndex + 1); // 나머지 문자열 추출 + } + + // 입력 문자열을 구분자로 분리 + String[] numbers; + if(input.contains(delimiter)) { + numbers = input.split(delimiter); + } + else numbers = new String[]{input}; + int sum = 0; + + for (String number : numbers) { + if (number.trim().isEmpty()) { + continue; // 빈 문자열 무시 + } + + try { + int num = Integer.parseInt(number.trim()); // 숫자로 변환 + if (num < 0) { + throw new IllegalArgumentException("음수는 허용되지 않습니다: " + num); // 음수 예외 처리 + } + sum += num; // 합산 + } catch (NumberFormatException e) { + throw new IllegalArgumentException("잘못된 숫자 형식: " + number); // 형식 예외 처리 + } + } + + return sum; // 최종 합계 반환 } }