|
1 | 1 | package me.kimihiqq; |
2 | 2 |
|
3 | | -import java.util.*; |
4 | | -import java.util.stream.Collectors; |
5 | | - |
6 | 3 | public class Application { |
7 | | - |
8 | | - private Scanner scanner = new Scanner(System.in); |
9 | | - private Map<Integer, String> history = new HashMap<>(); |
10 | | - private int id = 0; |
11 | | - |
12 | | - public void menu() { |
13 | | - while (true) { |
14 | | - System.out.println("1. 조회"); |
15 | | - System.out.println("2. 계산"); |
16 | | - System.out.println(); |
17 | | - System.out.print("선택 : "); |
18 | | - String selectPage = scanner.nextLine(); |
19 | | - |
20 | | - switch (selectPage) { |
21 | | - case "1" -> list(); |
22 | | - case "2" -> calculate(); |
23 | | - } |
24 | | - } |
25 | | - } |
26 | | - |
27 | | - public void calculate() { |
28 | | - String formula = scanner.nextLine(); |
29 | | - |
30 | | - if (!formula.matches("^(\\d\\s[+\\-*/]\\s)+\\d$")) { |
31 | | - System.out.println("Invalid formula!"); |
32 | | - return; |
33 | | - } |
34 | | - |
35 | | - String[] arr = formula.split(" "); |
36 | | - List<String> terms = Arrays.stream(arr).collect(Collectors.toList()); |
37 | | - |
38 | | - int i = 0; |
39 | | - while (i < terms.size()) { |
40 | | - if (terms.get(i).equals("*") || terms.get(i).equals("/")) { |
41 | | - long leftHandSide = Long.parseLong(terms.get(i - 1)); |
42 | | - long rightHandSide = Long.parseLong(terms.get(i + 1)); |
43 | | - long result = 0; |
44 | | - if (terms.get(i).equals("*")) { |
45 | | - result = leftHandSide * rightHandSide; |
46 | | - } else if (terms.get(i).equals("/")) { |
47 | | - result = leftHandSide / rightHandSide; |
48 | | - } |
49 | | - for (int j = 0; j < 3; j++) { |
50 | | - terms.remove(i - 1); |
51 | | - } |
52 | | - terms.add(i - 1, String.valueOf(result)); |
53 | | - } else { |
54 | | - i++; |
55 | | - } |
56 | | - } |
57 | | - |
58 | | - i = 0; |
59 | | - while (i < terms.size()) { |
60 | | - if (terms.get(i).equals("+") || terms.get(i).equals("-")) { |
61 | | - long leftHandSide = Long.parseLong(terms.get(i - 1)); |
62 | | - long rightHandSide = Long.parseLong(terms.get(i + 1)); |
63 | | - long result = 0; |
64 | | - if (terms.get(i).equals("+")) { |
65 | | - result = leftHandSide + rightHandSide; |
66 | | - } else if (terms.get(i).equals("-")) { |
67 | | - result = leftHandSide - rightHandSide; |
68 | | - } |
69 | | - for (int j = 0; j < 3; j++) { |
70 | | - terms.remove(i - 1); |
71 | | - } |
72 | | - terms.add(i - 1, String.valueOf(result)); |
73 | | - } else { |
74 | | - i++; |
75 | | - } |
76 | | - } |
77 | | - |
78 | | - System.out.println(terms.get(0)); |
79 | | - StringBuffer sb = new StringBuffer(); |
80 | | - String result = sb.append(formula) |
81 | | - .append(" = ") |
82 | | - .append(terms.get(0)) |
83 | | - .toString(); |
84 | | - storeHistory(result); |
85 | | - System.out.println(); |
86 | | - } |
87 | | - |
88 | | - private void storeHistory(String result) { |
89 | | - history.put(id++, result); |
90 | | - } |
91 | | - |
92 | | - public void list() { |
93 | | - for (Map.Entry<Integer, String> entry : history.entrySet()) { |
94 | | - System.out.println(entry.getValue()); |
95 | | - } |
96 | | - System.out.println(); |
97 | | - } |
98 | | - |
99 | 4 | public static void main(String[] args) { |
100 | | - Application application = new Application(); |
101 | | - application.menu(); |
| 5 | + Console console = new Console(); |
| 6 | + new Calculator(console, console).run(); |
102 | 7 | } |
103 | 8 | } |
0 commit comments