Skip to content
5 changes: 4 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1 +1,4 @@
# java-calculator-precourse
# java-calculator-precourse

1. 커스텀 문자열을 두 개이상의 문자를 받아 커스텀으로 만들기
2. 덧셈구현 외에도 계산기 시스템 모방하기
71 changes: 69 additions & 2 deletions src/main/java/calculator/Application.java
Original file line number Diff line number Diff line change
@@ -1,7 +1,74 @@
package calculator;

import camp.nextstep.edu.missionutils.Console;
import java.util.List;
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Application {

public static void main(String[] args) {
// TODO: 프로그램 구현
System.out.println("덧셈할 문자열을 입력해 주세요.");
String input = Console.readLine();

try {
int result = add(input);
System.out.println("결과 : " + result);

} catch (IllegalArgumentException e) {
throw new IllegalArgumentException(e);
}
}

public static String[] splitNumber(String text) {
String delimiter = ",|:";
String numbersText = text;

if (text.startsWith("//")) {
Matcher matcher = Pattern.compile("//(.)\\\\n(.*)").matcher(text);
if (matcher.matches()) {
delimiter = Pattern.quote(matcher.group(1));
numbersText = matcher.group(2);
}
}

return numbersText.split(delimiter);
}

public static int add(String input) {
if (input == null || input.isEmpty()) {
return 0;
}

String[] numbers = splitNumber(input);
return sum(numbers);
}

public static int sum(String[] numbers) {
int sum = 0;
List<Integer> negativeNumbers = new ArrayList<>();

for (String numberStr : numbers) {
if (numberStr.trim().isEmpty()) {
continue;
}

try {
int number = Integer.parseInt(numberStr.trim());
if (number < 0) {
throw new IllegalArgumentException("잘못");
}
sum += number;
} catch (NumberFormatException e) {
throw new IllegalArgumentException();
}
}

if (!negativeNumbers.isEmpty()) {
throw new IllegalArgumentException();
}

return sum;
}
}
}