diff --git a/src/main/java/Calculator.java b/src/main/java/Calculator.java new file mode 100644 index 0000000..b96f26c --- /dev/null +++ b/src/main/java/Calculator.java @@ -0,0 +1,62 @@ +import java.util.ArrayList; +import java.util.List; + +public class Calculator { + private static final String ADD_OPERATION = "+"; + private static final String SUBTRACT_OPERATION = "-"; + private static final String MULTIPLY_OPERATION = "*"; + private static final String DIVIDE_OPERATION = "/"; + private static final int NUMBER_INDEX = 0; + private static final int OPERATION_INDEX = 1; + + private List numberList = new ArrayList<>(); + private List operationList = new ArrayList<>(); + private int result = 0; + + public int operation(int firstNumber, int secondNumber, String operation) { + switch (operation) { + case ADD_OPERATION: + result = firstNumber + secondNumber; + break; + case SUBTRACT_OPERATION: + result = firstNumber - secondNumber; + break; + case MULTIPLY_OPERATION: + result = firstNumber * secondNumber; + break; + case DIVIDE_OPERATION: + result = firstNumber / secondNumber; + break; + default: + throw new RuntimeException("부적합한 연산자가 입력되었습니다."); + } + return result; + } + + public int execute(String[] line) { + validation(line); + addNumberList(line); + addOperationList(line); + result = Integer.parseInt(numberList.get(0)); + for (int i = 0; i < operationList.size(); i++) { + result = operation(result, Integer.parseInt(numberList.get(i + 1)), operationList.get(i)); + } + return result; + } + + private void validation(String[] formattedInput) { + if (formattedInput.length%2 == 0) throw new RuntimeException("올바른 식을 완성해주세요."); + } + + private void addNumberList(String[] formattedInput) { + for (int i = NUMBER_INDEX; i < formattedInput.length; i += 2) { + numberList.add(formattedInput[i]); + } + } + + private void addOperationList(String[] formattedInput) { + for (int i = OPERATION_INDEX; i < formattedInput.length; i += 2) { + operationList.add(formattedInput[i]); + } + } +} diff --git a/src/main/java/Input.java b/src/main/java/Input.java new file mode 100644 index 0000000..8328e6e --- /dev/null +++ b/src/main/java/Input.java @@ -0,0 +1,13 @@ +import java.util.Scanner; + +public class Input { + private static final String BLANK = " "; + + public static String inputExpression() { + Scanner scanner = new Scanner(System.in); + return scanner.nextLine(); + } + public static String[] split(String line) { + return line.split(BLANK); + } +} diff --git a/src/main/java/Main.java b/src/main/java/Main.java new file mode 100644 index 0000000..5431642 --- /dev/null +++ b/src/main/java/Main.java @@ -0,0 +1,28 @@ + + +public class Main { + + public static void main(String[] args) { + runCalculate(); + } + + public static void runCalculate() { + Calculator calculator = new Calculator(); + String[] lineForCalculate = getFormattedInput(); + try { + Output.printOutput(calculator.execute(lineForCalculate)); + } + catch (Exception e){ + Output.printOutputError(e); + runCalculate(); + } + } + + public static String[] getFormattedInput() { + String line = Input.inputExpression(); + String[] splittedLine = Input.split(line); + return splittedLine; + } + +} + diff --git a/src/main/java/Output.java b/src/main/java/Output.java new file mode 100644 index 0000000..65223af --- /dev/null +++ b/src/main/java/Output.java @@ -0,0 +1,10 @@ +public class Output { + public static void printOutput(int result) { + System.out.println(result); + } + public static void printOutputError(Exception e) { + System.out.println("출력 에러"); + e.printStackTrace(); + } + +} diff --git a/src/main/java/main.java b/src/main/java/main.java deleted file mode 100644 index 80aa024..0000000 --- a/src/main/java/main.java +++ /dev/null @@ -1,51 +0,0 @@ -import java.util.ArrayList; -import java.util.List; -import java.util.Scanner; - -public class main { - private static int calculate(int num1, int num2, String op) { - int result = 0; - switch (op) { - case "+" : - result = num1 + num2; - break; - case "-" : - result = num1 - num2; - break; - case "*" : - result = num1 * num2; - break; - case "/" : - result = num1 / num2; - break; - } - return result; - } - - private static void calculator(String[] line) { - List numList = new ArrayList<>(); - List opList = new ArrayList<>(); - - for (int i=0; i