diff --git a/README.md b/README.md index bd90ef0247..084826964a 100644 --- a/README.md +++ b/README.md @@ -1 +1,5 @@ -# java-calculator-precourse \ No newline at end of file +# java-calculator-precourse + +문자열을 받아서 덧셈 구현 +숫자끼리 합을 구해 결과 도출 +커스텀 구분자 지정 가능 \ No newline at end of file diff --git a/src/main/java/calculator/Application.java b/src/main/java/calculator/Application.java index 573580fb40..9734208cb4 100644 --- a/src/main/java/calculator/Application.java +++ b/src/main/java/calculator/Application.java @@ -1,7 +1,23 @@ package calculator; +import static camp.nextstep.edu.missionutils.Console.readLine; + public class Application { public static void main(String[] args) { - // TODO: 프로그램 구현 + Parse parse = new Parse(); + Calculator calculator = new Calculator(parse); + while(true) { + System.out.println("덧셈할 문자열을 입력해 주세요. 종료를 원하시면 0을 입력해 주세요."); + String input = readLine(); + if (input.isEmpty()) { + continue; + } + if (input.charAt(0) == '0') { + System.out.println("종료합니다."); + break; + } + int output = calculator.getOutput(input); + System.out.println("결과 : " + output); + } } -} +} \ No newline at end of file diff --git a/src/main/java/calculator/Calculator.java b/src/main/java/calculator/Calculator.java new file mode 100644 index 0000000000..66e0a52a45 --- /dev/null +++ b/src/main/java/calculator/Calculator.java @@ -0,0 +1,33 @@ +package calculator; + +public class Calculator { + private final Parse parse; + + public Calculator(Parse parse) { + this.parse = parse; + } + + public int getOutput(String input) { + int i = parse.parseCustom(input); + int result; + result = calculate(input,i); + + return result; + } + + public int calculate(String input, int i) { + int output = 0; + for (; i= '0' && input.charAt(i) <= '9') { + parse.addValue(input.charAt(i)); + } else { + System.out.println("숫자, 구분자 이외 문자 입력. 애플리케이션 종료."); + throw new IllegalArgumentException("숫자, 구분자 이외 문자 입력. 애플리케이션 종료."); + } + } + output += parse.parseInteger(); + return output; + } +} diff --git a/src/main/java/calculator/Parse.java b/src/main/java/calculator/Parse.java new file mode 100644 index 0000000000..868f2fd407 --- /dev/null +++ b/src/main/java/calculator/Parse.java @@ -0,0 +1,56 @@ +package calculator; + +import java.util.ArrayList; +import java.util.List; + +public class Parse { + private final List custom; + private final StringBuilder value = new StringBuilder(); + + public Parse() { + custom = new ArrayList<>(); + custom.add(','); + custom.add(':'); + } + public List getCustom() { + return custom; + } + + public int parseCustom(String input) { + if (input.length() < 5) { + return 0; + } + if (input.charAt(0) == '/') { + if (input.charAt(1) != '/') { + System.out.println("/만 나오므로 종료."); + throw new IllegalArgumentException("/만 나오므로 종료"); + } + if (input.charAt(3) != '\\') { + System.out.println("//이후 \\이 나오지 않아 종료."); + throw new IllegalArgumentException("//이후 \\이 나오지 않아 종료"); + } + if (input.charAt(4) != 'n') { + System.out.println("\\이후 n이 나오지 않아 종료."); + throw new IllegalArgumentException("\\이후 n이 나오지 않아 종료"); + } + if (!(custom.contains(input.charAt(2)))) { + custom.add(input.charAt(2)); + } + return 5; + } + return 0; + } + + public int parseInteger() { + int result = 0; + if (!(value.isEmpty())) { + result = Integer.parseInt(value.toString()); + } + value.setLength(0); + return result; + } + + public void addValue(char c) { + value.append(c); + } +}