Skip to content

Commit 2cc08b8

Browse files
committed
Merge branch 'master' back
2 parents 9c91360 + 4a6e4b7 commit 2cc08b8

File tree

2 files changed

+174
-124
lines changed

2 files changed

+174
-124
lines changed
Lines changed: 86 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,86 @@
1+
package simplejavacalculator;
2+
3+
public class Calculator {
4+
public enum BiOperatorModes {
5+
normal, add, minus, multiply, divide
6+
}
7+
8+
public enum MonoOperatorModes {
9+
square, squareRoot, oneDevidedBy, cos, sin, tan
10+
}
11+
12+
private Double num1, num2;
13+
private BiOperatorModes mode = BiOperatorModes.normal;
14+
15+
private Double calculateBiImpl() {
16+
if (mode == BiOperatorModes.normal) {
17+
return num2;
18+
}
19+
if (mode == BiOperatorModes.add) {
20+
return num1 + num2;
21+
}
22+
if (mode == BiOperatorModes.minus) {
23+
return num1 - num2;
24+
}
25+
if (mode == BiOperatorModes.multiply) {
26+
return num1 * num2;
27+
}
28+
if (mode == BiOperatorModes.divide) {
29+
return num1 / num2;
30+
}
31+
32+
// never reach
33+
throw new Error();
34+
}
35+
36+
public Double calculateBi(BiOperatorModes newMode, Double num) {
37+
if (mode == BiOperatorModes.normal) {
38+
num2 = 0.0;
39+
num1 = num;
40+
mode = newMode;
41+
return Double.NaN;
42+
} else {
43+
num2 = num;
44+
num1 = calculateBiImpl();
45+
mode = newMode;
46+
return num1;
47+
}
48+
}
49+
50+
public Double calculateEqual(Double num) {
51+
return calculateBi(BiOperatorModes.normal, num);
52+
}
53+
54+
public Double reset() {
55+
num2 = 0.0;
56+
num1 = 0.0;
57+
mode = BiOperatorModes.normal;
58+
59+
return Double.NaN;
60+
}
61+
62+
public Double calculateMono(MonoOperatorModes newMode, Double num) {
63+
if (newMode == MonoOperatorModes.square) {
64+
return num * num;
65+
}
66+
if (newMode == MonoOperatorModes.squareRoot) {
67+
return Math.sqrt(num);
68+
}
69+
if (newMode == MonoOperatorModes.oneDevidedBy) {
70+
return 1 / num;
71+
}
72+
if (newMode == MonoOperatorModes.cos) {
73+
return Math.cos(num);
74+
}
75+
if (newMode == MonoOperatorModes.sin) {
76+
return Math.sin(num);
77+
}
78+
if (newMode == MonoOperatorModes.tan) {
79+
return Math.tan(num);
80+
}
81+
82+
// never reach
83+
throw new Error();
84+
}
85+
86+
}

src/simplejavacalculator/UI.java

Lines changed: 88 additions & 124 deletions
Original file line numberDiff line numberDiff line change
@@ -17,31 +17,37 @@
1717
package simplejavacalculator;
1818

1919
import java.awt.FlowLayout;
20-
import javax.swing.*;
21-
import java.awt.event.ActionListener;
2220
import java.awt.event.ActionEvent;
21+
import java.awt.event.ActionListener;
22+
23+
import javax.swing.JButton;
24+
import javax.swing.JFrame;
25+
import javax.swing.JPanel;
26+
import javax.swing.JTextArea;
2327

2428
public class UI implements ActionListener {
29+
private final JFrame frame;
30+
private final JPanel panel;
31+
private final JTextArea text;
32+
private final JButton but[], butAdd, butMinus, butMultiply, butDivide,
33+
butEqual, butCancel, butSquareRoot, butSquare, butOneDevidedBy,
34+
butCos, butSin, butTan;
35+
private final Calculator calc;
2536

26-
private JFrame frame;
27-
private JPanel panel;
28-
private JTextArea text;
29-
private JButton but[], butAdd, butMinus, butMultiply, butDivide, butEqual, butCancel, butSquareRoot, butSquare, butOneDevidedBy, butCos, butSin, butTan;
30-
private Double num1, num2, result;
31-
private int add = 0, minus = 0, multiply = 0, divide = 0;
32-
String[] buttonValue = {"0","1","2","3","4","5","6","7","8","9"};
37+
private final String[] buttonValue = { "0", "1", "2", "3", "4", "5", "6",
38+
"7", "8", "9" };
3339

3440
public UI() {
3541
frame = new JFrame("Calculator PH");
3642
frame.setResizable(false);
3743
panel = new JPanel(new FlowLayout());
38-
39-
text = new JTextArea(2,25);
44+
45+
text = new JTextArea(2, 25);
4046
but = new JButton[10];
41-
for(int i = 0; i < 10; i++) {
47+
for (int i = 0; i < 10; i++) {
4248
but[i] = new JButton(String.valueOf(i));
4349
}
44-
50+
4551
butAdd = new JButton("+");
4652
butMinus = new JButton("-");
4753
butMultiply = new JButton("*");
@@ -53,18 +59,20 @@ public UI() {
5359
butCos = new JButton("Cos");
5460
butSin = new JButton("Sin");
5561
butTan = new JButton("Tan");
56-
62+
5763
butCancel = new JButton("C");
64+
65+
calc = new Calculator();
5866
}
59-
67+
6068
public void init() {
6169
frame.setVisible(true);
62-
frame.setSize(350,280);
70+
frame.setSize(350, 280);
6371
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
6472
frame.add(panel);
65-
73+
6674
panel.add(text);
67-
for(int i = 0; i < 10; i++) {
75+
for (int i = 0; i < 10; i++) {
6876
panel.add(but[i]);
6977
but[i].addActionListener(this);
7078
}
@@ -82,7 +90,7 @@ public void init() {
8290

8391
panel.add(butEqual);
8492
panel.add(butCancel);
85-
93+
8694
butAdd.addActionListener(this);
8795
butMinus.addActionListener(this);
8896
butMultiply.addActionListener(this);
@@ -93,139 +101,95 @@ public void init() {
93101
butCos.addActionListener(this);
94102
butSin.addActionListener(this);
95103
butTan.addActionListener(this);
96-
104+
97105
butEqual.addActionListener(this);
98106
butCancel.addActionListener(this);
99107
}
100108

101109
@Override
102110
public void actionPerformed(ActionEvent e) {
103-
Object source = e.getSource();
111+
final Object source = e.getSource();
104112

105-
for(int i = 0; i < 10; i++) {
106-
if(source == but[i]) {
107-
text.append(buttonValue[i]);
113+
for (int i = 0; i < 10; i++) {
114+
if (source == but[i]) {
115+
text.replaceSelection(buttonValue[i]);
116+
return;
108117
}
109118
}
110-
111-
if(source == butAdd) {
112-
num1 = reader();
113-
text.setText("");
114-
add = 1;
115-
minus = 0;
116-
multiply = 0;
117-
divide = 0;
118-
}
119-
120-
if(source == butAdd) {
121-
num1 = reader();
122-
text.setText("");
123-
add = 1;
124-
minus = 0;
125-
multiply = 0;
126-
divide = 0;
127-
}
128-
129-
if(source == butMinus) {
130-
num1 = reader();
131-
text.setText("");
132-
add = 0;
133-
minus = 1;
134-
multiply = 0;
135-
divide = 0;
136-
}
137-
138-
if(source == butMultiply) {
139-
num1 = reader();
140-
text.setText("");
141-
add = 0;
142-
minus = 0;
143-
multiply = 1;
144-
divide = 0;
145-
}
146-
147-
if(source == butDivide) {
148-
num1 = reader();
149-
text.setText("");
150-
add = 1;
151-
minus = 0;
152-
multiply = 0;
153-
divide = 1;
119+
120+
if (source == butAdd) {
121+
writer(calc.calculateBi(Calculator.BiOperatorModes.add, reader()));
154122
}
155123

156-
if(source == butSquare) {
157-
num1 = reader();
158-
result = num1*num1;
159-
text.setText(Double.toString(result));
124+
if (source == butMinus) {
125+
writer(calc.calculateBi(Calculator.BiOperatorModes.minus, reader()));
160126
}
161127

162-
if(source == butSquareRoot) {
163-
num1 = reader();
164-
result = Math.sqrt(num1);
165-
text.setText(Double.toString(result));
128+
if (source == butMultiply) {
129+
writer(calc.calculateBi(Calculator.BiOperatorModes.multiply,
130+
reader()));
166131
}
167132

168-
if(source == butOneDevidedBy) {
169-
num1 = reader();
170-
result = 1/num1;
171-
text.setText(Double.toString(result));
133+
if (source == butDivide) {
134+
writer(calc
135+
.calculateBi(Calculator.BiOperatorModes.divide, reader()));
172136
}
173137

174-
if(source == butCos) {
175-
num1 = reader();
176-
result = Math.cos(num1);
177-
text.setText(Double.toString(result));
138+
if (source == butSquare) {
139+
writer(calc.calculateMono(Calculator.MonoOperatorModes.square,
140+
reader()));
178141
}
179142

180-
if(source == butSin) {
181-
num1 = reader();
182-
result = Math.sin(num1);
183-
text.setText(Double.toString(result));
143+
if (source == butSquareRoot) {
144+
writer(calc.calculateMono(Calculator.MonoOperatorModes.squareRoot,
145+
reader()));
184146
}
185147

186-
if(source == butTan) {
187-
num1 = reader();
188-
result = Math.tan(num1);
189-
text.setText(Double.toString(result));
148+
if (source == butOneDevidedBy) {
149+
writer(calc.calculateMono(
150+
Calculator.MonoOperatorModes.oneDevidedBy, reader()));
190151
}
191-
192-
if(source == butEqual) {
193-
num2 = reader();
194-
195-
if(add > 0) {
196-
result = num1+num2;
197-
text.setText(Double.toString(result));
198-
}
199-
200-
if(minus > 0) {
201-
result = num1-num2;
202-
text.setText(Double.toString(result));
203-
}
204-
205-
if(multiply > 0) {
206-
result = num1*num2;
207-
text.setText(Double.toString(result));
208-
}
209-
210-
if(divide > 0) {
211-
result = num1/num2;
212-
text.setText(Double.toString(result));
213-
}
152+
153+
if (source == butCos) {
154+
writer(calc.calculateMono(Calculator.MonoOperatorModes.cos,
155+
reader()));
214156
}
215-
216-
if(source == butCancel) {
217-
num1 = 0.0;
218-
num2 = 0.0;
219-
text.setText("");
157+
158+
if (source == butSin) {
159+
writer(calc.calculateMono(Calculator.MonoOperatorModes.sin,
160+
reader()));
161+
}
162+
163+
if (source == butTan) {
164+
writer(calc.calculateMono(Calculator.MonoOperatorModes.tan,
165+
reader()));
166+
}
167+
168+
if (source == butEqual) {
169+
writer(calc.calculateEqual(reader()));
220170
}
171+
172+
if (source == butCancel) {
173+
writer(calc.reset());
174+
}
175+
176+
text.selectAll();
221177
}
222-
223-
public double reader() {
178+
179+
public Double reader() {
224180
Double num;
225181
String str;
226182
str = text.getText();
227183
num = Double.valueOf(str);
228-
229-
return num;
184+
185+
return num;
186+
}
187+
188+
public void writer(final Double num) {
189+
if (Double.isNaN(num)) {
190+
text.setText("");
191+
} else {
192+
text.setText(Double.toString(num));
193+
}
230194
}
231195
}

0 commit comments

Comments
 (0)