Skip to content

Commit 5133b6a

Browse files
authored
Create Calc.java
1 parent 535f463 commit 5133b6a

File tree

1 file changed

+170
-0
lines changed

1 file changed

+170
-0
lines changed

Calculator using Java/Calc.java

+170
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,170 @@
1+
package simplejavacalculator;
2+
3+
import static java.lang.Double.NaN;
4+
import static java.lang.Math.log10;
5+
import static java.lang.Math.pow;
6+
7+
8+
9+
10+
public class Calculator {
11+
12+
public enum BiOperatorModes {
13+
14+
normal, add, minus, multiply, divide , xpowerofy
15+
16+
}
17+
18+
public enum MonoOperatorModes {
19+
20+
square, squareRoot, oneDividedBy, cos, sin, tan ,log , rate, abs
21+
22+
}
23+
24+
private double num1, num2;
25+
26+
private BiOperatorModes mode = BiOperatorModes.normal;
27+
28+
private double calculateBiImpl() {
29+
30+
if (mode == BiOperatorModes.normal) {
31+
32+
return num2;
33+
34+
}
35+
36+
if (mode == BiOperatorModes.add) {
37+
38+
if (num2 != 0) {
39+
40+
return num1 + num2;
41+
42+
}
43+
44+
return num1;
45+
46+
}
47+
48+
if (mode == BiOperatorModes.minus) {
49+
50+
return num1 - num2;
51+
52+
}
53+
54+
if (mode == BiOperatorModes.multiply) {
55+
56+
return num1 * num2;
57+
58+
}
59+
60+
if (mode == BiOperatorModes.divide) {
61+
62+
return num1 / num2;
63+
64+
}
65+
66+
if (mode == BiOperatorModes.xpowerofy) {
67+
68+
return pow(num1,num2);
69+
70+
}
71+
72+
// never reach
73+
74+
throw new Error();
75+
76+
}
77+
78+
public Double calculateBi(BiOperatorModes newMode, Double num) {
79+
80+
if (mode == BiOperatorModes.normal) {
81+
82+
num2 = 0.0;
83+
84+
num1 = num;
85+
86+
mode = newMode;
87+
88+
return NaN;
89+
90+
} else {
91+
92+
num2 = num;
93+
94+
num1 = calculateBiImpl();
95+
96+
mode = newMode;
97+
98+
return num1;
99+
100+
}
101+
102+
}
103+
104+
public Double calculateEqual(Double num) {
105+
106+
return calculateBi(BiOperatorModes.normal, num);
107+
108+
}
109+
110+
public Double reset() {
111+
112+
num2 = 0.0;
113+
114+
num1 = 0.0;
115+
116+
mode = BiOperatorModes.normal;
117+
118+
return NaN;
119+
120+
}
121+
122+
public Double calculateMono(MonoOperatorModes newMode, Double num) {
123+
124+
if (newMode == MonoOperatorModes.square) {
125+
126+
return num * num;
127+
128+
}
129+
130+
if (newMode == MonoOperatorModes.squareRoot) {
131+
132+
return Math.sqrt(num);
133+
134+
}
135+
136+
if (newMode == MonoOperatorModes.oneDividedBy) {
137+
138+
return 1 / num;
139+
140+
}
141+
142+
if (newMode == MonoOperatorModes.cos) {
143+
144+
return Math.cos(Math.toRadians(num));
145+
146+
}
147+
148+
if (newMode == MonoOperatorModes.sin) {
149+
150+
return Math.sin(Math.toRadians(num));
151+
152+
}
153+
154+
if (newMode == MonoOperatorModes.tan) {
155+
if (num == 0 || num % 180 == 0) {
156+
return 0.0;
157+
}
158+
if (num % 90 == 0 && num % 180 != 0) {
159+
return NaN;
160+
}
161+
return Math.tan(Math.toRadians(num));
162+
}
163+
164+
if (newMode == MonoOperatorModes.log) {
165+
return log10(num);
166+
}
167+
168+
if (newMode == MonoOperatorModes.rate) {
169+
return num / 100;
170+
}

0 commit comments

Comments
 (0)