Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Zxcvhjh #60

Open
wants to merge 10 commits into
base: master
Choose a base branch
from
32 changes: 28 additions & 4 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,29 @@
# java-calculator
문자열 계산기 미션 저장소
# 문자열 덧셈 계산기

## 우아한테크코스 코드리뷰
* [온라인 코드 리뷰 과정](https://github.com/woowacourse/woowacourse-docs/blob/master/maincourse/README.md)

## 기능 요구 사항
입력한 문자열에서 숫자를 추출하여 더하는 계산기를 구현합니다.


### 기본 기능
1. **입력 문자열 받기**: 사용자로부터 입력 문자열을 받습니다.

2. **입력 문자열 구분**: 입력 문자열이 쉼표(,) 또는 콜론(:)을 구분자로 가지는 문자열을 전달할 경우, 구분자를 기준으로 숫자를 분리합니다.
- 예:
- `""` => `0`
- `"1,2"` => `3`
- `"1,2,3"` => `6`
- `"1,2:3"` => `6`

3. **커스텀 구분자 지원**: 기본 구분자(, 또는 :) 외에 커스텀 구분자(입력 시 "//"와 "\n" 사이에 위치하는 문자)가 있을 경우 커스텀 구분자를 기준으로 숫자를 분리합니다.
- 예:
- `"//;\n1;2;3"` => `6` (커스텀 구분자는 세미콜론(;))


4. **숫자 더하기**: 구분자를 기준으로 분리한 숫자를 더하여 반환합니다.

5. **결과 출력**: 결과 값을 출력합니다.


### 오류 처리
- 사용자가 잘못된 값을 입력할 경우 `IllegalArgumentException`을 발생시키고 애플리케이션을 종료합니다.
57 changes: 57 additions & 0 deletions src/main/java/Calculator.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
import camp.nextstep.edu.missionutils.Console;

public class Calculator {

public int add(String input) {
String[] numbers = splitInput(input);
return sum(numbers);
}

private String[] splitInput(String input) {

if (input == null || input.isEmpty()) {
throw new IllegalArgumentException("Input cannot be null or empty.");
}

String delimiter = ",|:";
if (input.startsWith("//")) {
int delimiterIndex = input.indexOf("\n");
delimiter = input.substring(2, delimiterIndex);
input = input.substring(delimiterIndex + 1);
}
return input.split(delimiter);
}

private int sum(String[] numbers) {
int total = 0;
for (String number : numbers) {
total += parseNumber(number);
}
return total;
}

private int parseNumber(String number) {
try {
int num = Integer.parseInt(number);
if (num < 0) {
throw new IllegalArgumentException("Negative numbers are not allowed: " + number);
}
return num;
} catch (NumberFormatException e) {
throw new IllegalArgumentException("Invalid input: " + number);
}
}

public static void main(String[] args) {
System.out.println("덧셈할 문자열을 입력해 주세요.");
String input = Console.readLine();
Calculator calculator = new Calculator();
try {
int result = calculator.add(input);
System.out.println("결과 : " + result);
} catch (IllegalArgumentException e) {
System.out.println("Error: " + e.getMessage());
}
}
}