|
@@ -1,7 +1,5 @@
|
1
|
|
-
|
2
|
1
|
|
3
|
2
|
import java.util.Scanner;
|
4
|
|
-
|
5
|
3
|
/**
|
6
|
4
|
* Created by leon on 2/9/18.
|
7
|
5
|
*
|
|
@@ -14,177 +12,230 @@ import java.util.Scanner;
|
14
|
12
|
*
|
15
|
13
|
*/
|
16
|
14
|
public class Console {
|
17
|
|
-
|
|
15
|
+
|
18
|
16
|
private Calculator calc;
|
19
|
17
|
private NumericInputParser parse;
|
20
|
|
-
|
|
18
|
+
|
21
|
19
|
public Console(){
|
22
|
20
|
calc = new Calculator();
|
23
|
21
|
parse = new NumericInputParser();
|
24
|
22
|
}
|
25
|
|
-
|
26
|
|
-
|
|
23
|
+
|
27
|
24
|
public void runCommandLoop()
|
28
|
25
|
{
|
29
|
26
|
Scanner input = new Scanner(System.in);
|
30
|
|
- Calculator calc = new Calculator();
|
31
|
27
|
println("Welcome to this calculator!");
|
32
|
28
|
println("For a user guide, enter '?'");
|
33
|
|
-
|
|
29
|
+
|
34
|
30
|
while (true) {
|
35
|
31
|
print("Enter a command: ");
|
36
|
32
|
String command = input.next();
|
37
|
|
- if (command.equalsIgnoreCase("exit")) {
|
38
|
|
- print("Thanks for calculating with us!");
|
39
|
|
- break;
|
40
|
|
- }
|
41
|
|
- else if (command.equalsIgnoreCase("clear")){
|
42
|
|
- calc.clear();
|
43
|
|
- println(parse.getFormattedNumber(calc.getDisplayValue()));
|
44
|
|
- }
|
45
|
|
- else if (command.equalsIgnoreCase("val")){
|
46
|
|
- double val = calc.getDisplayValue();
|
47
|
|
- println("The current value is: %s", parse.getFormattedNumber(val));
|
48
|
|
- }
|
49
|
|
- else if (command.equalsIgnoreCase("?")){
|
50
|
|
- printGuide();
|
51
|
|
- }
|
52
|
|
-
|
53
|
|
- //Core Features
|
54
|
|
-
|
55
|
|
- else if (command.equalsIgnoreCase("add")) {
|
56
|
|
- double d1 = getDoubleInput("First value: ");
|
57
|
|
- double d2 = getDoubleInput("Second value: ");
|
58
|
|
- double result = calc.add(d1, d2);
|
59
|
|
- println("The sum is: %s", parse.getFormattedNumber(result));
|
60
|
|
- }
|
61
|
|
- else if (command.equalsIgnoreCase("subtract")) {
|
62
|
|
- double d1 = getDoubleInput("First value: ");
|
63
|
|
- double d2 = getDoubleInput("Second value: ");
|
64
|
|
- double result = calc.subtract(d1, d2);
|
65
|
|
- println("The difference is: %s", parse.getFormattedNumber(result));
|
66
|
|
-
|
67
|
|
- }
|
68
|
|
- else if (command.equalsIgnoreCase("multiply")) {
|
69
|
|
- double d1 = getDoubleInput("Multiplicand: ");
|
70
|
|
- double d2 = getDoubleInput("Multiplier: ");
|
71
|
|
- double result = calc.multiply(d1, d2);
|
72
|
|
- println("The product is: %s", parse.getFormattedNumber(result));
|
73
|
|
- }
|
74
|
|
- else if (command.equalsIgnoreCase("divide")) {
|
75
|
|
- double d1 = getDoubleInput("Dividend: ");
|
76
|
|
- double d2 = getDoubleInput("Divisor: ");
|
77
|
|
- double result = calc.multiply(d1, d2);
|
78
|
|
- println("The quotient is: %s", parse.getFormattedNumber(result));
|
79
|
|
- }
|
80
|
|
- else if (command.equalsIgnoreCase("square")) {
|
81
|
|
- double d = getDoubleInput("Value: ");
|
82
|
|
- double result = calc.square(d);
|
83
|
|
- println("The square is: %s", parse.getFormattedNumber(result));
|
84
|
|
-
|
85
|
|
- }
|
86
|
|
- else if (command.equalsIgnoreCase("pow")) {
|
87
|
|
- double b = getDoubleInput("Base: ");
|
88
|
|
- int e = getIntegerInput("Exponent: ");
|
89
|
|
- double result = calc.pow(b, e);
|
90
|
|
- println("The exponentiation is: %s", parse.getFormattedNumber(result));
|
91
|
|
- }
|
92
|
|
- else if (command.equalsIgnoreCase("sqrt")) {
|
93
|
|
- double d = getDoubleInput("Value: ");
|
94
|
|
- double result = calc.squareRoot(d);
|
95
|
|
- println("The square root is: %s", parse.getFormattedNumber(result));
|
96
|
|
-
|
97
|
|
- }
|
98
|
|
- else if (command.equalsIgnoreCase("inverse")) {
|
99
|
|
- double d = getDoubleInput("Value: ");
|
100
|
|
- double result = calc.inverse(d);
|
101
|
|
- println("The inverse is: %s", result);
|
102
|
|
- }
|
103
|
|
-
|
104
|
|
- //trig functions
|
105
|
|
- else if (command.equalsIgnoreCase("sin")) {
|
106
|
|
- double d = getDoubleInput("Value: ");
|
107
|
|
- //call the sin method on calc and display
|
108
|
|
- double result = calc.sin(d);
|
109
|
|
- println("The sin is: %s", parse.getFormattedAngle(result));
|
110
|
|
-
|
111
|
|
- }
|
112
|
|
- else if (command.equalsIgnoreCase("cos")) {
|
113
|
|
- double d = getDoubleInput("Value: ");
|
114
|
|
- //call the sin method on calc and display
|
115
|
|
- double result = calc.cos(d);
|
116
|
|
- println("The cos is: %s", parse.getFormattedAngle(result));
|
117
|
|
-
|
118
|
|
- }
|
119
|
|
- else if (command.equalsIgnoreCase("tan")) {
|
120
|
|
- double d = getDoubleInput("Value: ");
|
121
|
|
- //call the tan method on calc and display
|
122
|
|
- double result = calc.tan(d);
|
123
|
|
- println("The tan is: %s", parse.getFormattedAngle(result));
|
124
|
|
-
|
125
|
|
- }
|
126
|
|
-
|
127
|
|
- //display mode changes
|
128
|
|
- else if (command.equalsIgnoreCase("hex") ||
|
129
|
|
- command.equalsIgnoreCase("oct") ||
|
130
|
|
- command.equalsIgnoreCase("dec") ||
|
131
|
|
- command.equalsIgnoreCase("bin") ){
|
132
|
|
- String displayMode = parse.switchDisplayMode(command);
|
133
|
|
- println("Display mode changed to %s", displayMode);
|
134
|
|
- }
|
135
|
|
- else if (command.equalsIgnoreCase("display")) {
|
136
|
|
- String displayMode = parse.switchDisplayMode();
|
137
|
|
- println("Display mode changed to %s", displayMode);
|
138
|
|
- }
|
139
|
|
-
|
140
|
|
- //trig units mode changes
|
141
|
|
- else if (command.equalsIgnoreCase("rad") ||
|
142
|
|
- command.equalsIgnoreCase("deg")) {
|
143
|
|
- String trigUnitsMode = parse.switchUnitsMode(command);
|
144
|
|
- println("Trig units changed to %s", trigUnitsMode);
|
145
|
|
- }
|
146
|
|
- else if (command.equalsIgnoreCase("trig")) {
|
147
|
|
- String trigUnitsMode = parse.switchUnitsMode();
|
148
|
|
- println("Trig units changed to %s", trigUnitsMode);
|
149
|
|
- }
|
150
|
|
-
|
151
|
|
- //memory features
|
152
|
|
- else if (command.equalsIgnoreCase("M+")) {
|
153
|
|
- //add the display value to memory
|
154
|
|
- double mem = calc.memSet();
|
155
|
|
- println("Memory value set to: %s", parse.getFormattedNumber(mem));
|
156
|
|
- }
|
157
|
|
- else if (command.equalsIgnoreCase("MC")) {
|
158
|
|
- //clear the memory
|
159
|
|
- double mem = calc.memClear();
|
160
|
|
- println("Memory cleared.\nMemory value set to: %s", parse.getFormattedNumber(mem));
|
161
|
|
- }
|
162
|
|
- else if (command.equalsIgnoreCase("MRC")) {
|
163
|
|
- double mem = calc.mrc();
|
164
|
|
-
|
|
33
|
+
|
|
34
|
+ try {
|
|
35
|
+ if (command.equalsIgnoreCase("exit")) {
|
|
36
|
+ print("Thanks for calculating with us!");
|
|
37
|
+ break;
|
|
38
|
+ }
|
|
39
|
+ else if (command.equalsIgnoreCase("clear")){
|
|
40
|
+ calc.clear();
|
|
41
|
+ println(parse.getFormattedNumber(calc.getDisplayValue()));
|
|
42
|
+ }
|
|
43
|
+ else if (command.equalsIgnoreCase("val")){
|
|
44
|
+ double val = calc.getDisplayValue();
|
|
45
|
+ println("The current value is: %s", parse.getFormattedNumber(val));
|
|
46
|
+ }
|
|
47
|
+ else if (command.equalsIgnoreCase("?")){
|
|
48
|
+ printGuide();
|
|
49
|
+ }
|
|
50
|
+
|
|
51
|
+ //Core Features
|
|
52
|
+
|
|
53
|
+ else if (command.equalsIgnoreCase("add")) {
|
|
54
|
+ double d1 = getDoubleInput("First value: ");
|
|
55
|
+ double d2 = getDoubleInput("Second value: ");
|
|
56
|
+ double result = calc.add(d1, d2);
|
|
57
|
+ println("The sum is: %s", parse.getFormattedNumber(result));
|
|
58
|
+ }
|
|
59
|
+ else if (command.equalsIgnoreCase("sub")) {
|
|
60
|
+ double d1 = getDoubleInput("First value: ");
|
|
61
|
+ double d2 = getDoubleInput("Second value: ");
|
|
62
|
+ double result = calc.subtract(d1, d2);
|
|
63
|
+ println("The difference is: %s", parse.getFormattedNumber(result));
|
|
64
|
+
|
|
65
|
+ }
|
|
66
|
+ else if (command.equalsIgnoreCase("mult")) {
|
|
67
|
+ double d1 = getDoubleInput("Multiplicand: ");
|
|
68
|
+ double d2 = getDoubleInput("Multiplier: ");
|
|
69
|
+ double result = calc.multiply(d1, d2);
|
|
70
|
+ println("The product is: %s", parse.getFormattedNumber(result));
|
|
71
|
+ }
|
|
72
|
+ else if (command.equalsIgnoreCase("div")) {
|
|
73
|
+ double d1 = getDoubleInput("Dividend: ");
|
|
74
|
+ double d2 = getDoubleInput("Divisor: ");
|
|
75
|
+ if (d2 == 0){
|
|
76
|
+ errMessage();
|
|
77
|
+ }
|
|
78
|
+ else {
|
|
79
|
+ double result = calc.divide(d1, d2);
|
|
80
|
+ println("The quotient is: %s", parse.getFormattedNumber(result));
|
|
81
|
+ }
|
|
82
|
+ }
|
|
83
|
+ else if (command.equalsIgnoreCase("sq")) {
|
|
84
|
+ double d = getDoubleInput("Value: ");
|
|
85
|
+ double result = calc.square(d);
|
|
86
|
+ println("The square is: %s", parse.getFormattedNumber(result));
|
|
87
|
+
|
|
88
|
+ }
|
|
89
|
+ else if (command.equalsIgnoreCase("pow")) {
|
|
90
|
+ double b = getDoubleInput("Base: ");
|
|
91
|
+ int e = getIntegerInput("Exponent: ");
|
|
92
|
+ double result = calc.pow(b, e);
|
|
93
|
+ println("The exponentiation is: %s", parse.getFormattedNumber(result));
|
|
94
|
+ }
|
|
95
|
+ else if (command.equalsIgnoreCase("sqrt")) {
|
|
96
|
+ double d = getDoubleInput("Value: ");
|
|
97
|
+ double result = calc.squareRoot(d);
|
|
98
|
+ println("The square root is: %s", parse.getFormattedNumber(result));
|
|
99
|
+
|
|
100
|
+ }
|
|
101
|
+ else if (command.equalsIgnoreCase("inv")) {
|
|
102
|
+ double d = getDoubleInput("Value: ");
|
|
103
|
+ if (d == 0){
|
|
104
|
+ errMessage();
|
|
105
|
+ }
|
|
106
|
+ else {
|
|
107
|
+ double result = calc.inverse(d);
|
|
108
|
+ println("The inverse is: %s", result);
|
|
109
|
+ }
|
|
110
|
+ }
|
|
111
|
+
|
|
112
|
+ //trig functions
|
|
113
|
+ else if (command.equalsIgnoreCase("sin")) {
|
|
114
|
+ double d = getDoubleInput("Value: ");
|
|
115
|
+ //call the sin method on calc and display
|
|
116
|
+ double result = calc.sin(d);
|
|
117
|
+ println("The sin is: %s", parse.getFormattedAngle(result));
|
|
118
|
+
|
|
119
|
+ }
|
|
120
|
+ else if (command.equalsIgnoreCase("cos")) {
|
|
121
|
+ double d = getDoubleInput("Value: ");
|
|
122
|
+ //call the sin method on calc and display
|
|
123
|
+ double result = calc.cos(d);
|
|
124
|
+ println("The cos is: %s", parse.getFormattedAngle(result));
|
|
125
|
+
|
|
126
|
+ }
|
|
127
|
+ else if (command.equalsIgnoreCase("tan")) {
|
|
128
|
+ double d = getDoubleInput("Value: ");
|
|
129
|
+ //call the tan method on calc and display
|
|
130
|
+ double result = calc.tan(d);
|
|
131
|
+ println("The tan is: %s", parse.getFormattedAngle(result));
|
|
132
|
+
|
|
133
|
+ }
|
|
134
|
+ else if (command.equalsIgnoreCase("cot")) {
|
|
135
|
+ double d = getDoubleInput("Value: ");
|
|
136
|
+ double result = calc.inverseTan(d);
|
|
137
|
+ println("The cot is: %s", parse.getFormattedAngle(result));
|
|
138
|
+
|
|
139
|
+ }
|
|
140
|
+ else if (command.equalsIgnoreCase("csc")){
|
|
141
|
+ double d = getDoubleInput("Value: ");
|
|
142
|
+ double result = calc.inverseSin(d);
|
|
143
|
+ println("The csc is: %s", parse.getFormattedAngle(result));
|
|
144
|
+ }
|
|
145
|
+ else if (command.equalsIgnoreCase("sec")){
|
|
146
|
+ double d = getDoubleInput("Value: ");
|
|
147
|
+ double result = calc.inverseCos(d);
|
|
148
|
+ println("The sec is: %s", parse.getFormattedAngle(result));
|
|
149
|
+ }
|
|
150
|
+
|
|
151
|
+ //Bonus Functions
|
|
152
|
+ else if (command.equalsIgnoreCase("log")){
|
|
153
|
+ double d = getDoubleInput("Value: ");
|
|
154
|
+ double result = calc.log(d);
|
|
155
|
+ println("The log is: %s", parse.getFormattedNumber(result));
|
|
156
|
+ }
|
|
157
|
+ else if (command.equalsIgnoreCase("antilog")){
|
|
158
|
+ double d = getDoubleInput("Value: ");
|
|
159
|
+ double result = calc.inverseLog(d);
|
|
160
|
+ println("The inverse log (base 10) is: %s", parse.getFormattedNumber(result));
|
|
161
|
+ }
|
|
162
|
+ else if (command.equalsIgnoreCase("antiln")){
|
|
163
|
+ double d = getDoubleInput("Value: ");
|
|
164
|
+ double result = calc.inverseLn(d);
|
|
165
|
+ println("The inverse natural log is: %s", parse.getFormattedNumber(result));
|
|
166
|
+ }
|
|
167
|
+ else if (command.equalsIgnoreCase("pi")){
|
|
168
|
+ println("The current value is now: %s", parse.getFormattedNumber(calc.displayPi()));
|
|
169
|
+ }
|
|
170
|
+ else if (command.equalsIgnoreCase("e")){
|
|
171
|
+ println("The current value is now: %s", parse.getFormattedNumber(calc.displayE()));
|
|
172
|
+ }
|
|
173
|
+ //display mode changes
|
|
174
|
+ else if (command.equalsIgnoreCase("hex") ||
|
|
175
|
+ command.equalsIgnoreCase("oct") ||
|
|
176
|
+ command.equalsIgnoreCase("dec") ||
|
|
177
|
+ command.equalsIgnoreCase("bin") ){
|
|
178
|
+ String displayMode = parse.switchDisplayMode(command);
|
|
179
|
+ println("Display mode changed to %s", displayMode);
|
|
180
|
+ }
|
|
181
|
+ else if (command.equalsIgnoreCase("display")) {
|
|
182
|
+ String displayMode = parse.switchDisplayMode();
|
|
183
|
+ println("Display mode changed to %s", displayMode);
|
|
184
|
+ }
|
|
185
|
+
|
|
186
|
+ //trig units mode changes
|
|
187
|
+ else if (command.equalsIgnoreCase("rad") ||
|
|
188
|
+ command.equalsIgnoreCase("deg")) {
|
|
189
|
+ String trigUnitsMode = parse.switchUnitsMode(command);
|
|
190
|
+ println("Trig units changed to %s", trigUnitsMode);
|
|
191
|
+ }
|
|
192
|
+ else if (command.equalsIgnoreCase("trig")) {
|
|
193
|
+ String trigUnitsMode = parse.switchUnitsMode();
|
|
194
|
+ println("Trig units changed to %s", trigUnitsMode);
|
|
195
|
+ }
|
|
196
|
+
|
|
197
|
+ //memory features
|
|
198
|
+ else if (command.equalsIgnoreCase("M+")) {
|
|
199
|
+ //add the display value to memory
|
|
200
|
+ double mem = calc.memSet();
|
|
201
|
+ println("Memory value set to: %s", parse.getFormattedNumber(mem));
|
|
202
|
+ }
|
|
203
|
+ else if (command.equalsIgnoreCase("MC")) {
|
|
204
|
+ //clear the memory
|
|
205
|
+ double mem = calc.memClear();
|
|
206
|
+ println("Memory cleared.\nMemory value set to: %s", parse.getFormattedNumber(mem));
|
|
207
|
+ }
|
|
208
|
+ else if (command.equalsIgnoreCase("MRC")) {
|
|
209
|
+ double mem = calc.mrc();
|
|
210
|
+
|
|
211
|
+ }
|
|
212
|
+
|
|
213
|
+ else {
|
|
214
|
+ System.out.println("Invalid input. Enter '?' for a user guide");
|
|
215
|
+ System.out.println("Enter 'exit' to quit");
|
|
216
|
+ }
|
165
|
217
|
}
|
166
|
|
-
|
167
|
|
-
|
168
|
|
- else {
|
169
|
|
- System.out.println("Invalid input. Enter '?' for a user guide");
|
170
|
|
- System.out.println("Enter 'exit' to quit");
|
|
218
|
+ catch (ArithmeticException e) {
|
|
219
|
+ errMessage();
|
171
|
220
|
}
|
172
|
221
|
}
|
173
|
222
|
|
174
|
223
|
}
|
175
|
|
-
|
|
224
|
+
|
176
|
225
|
public static void print(String output, Object... args) {
|
177
|
226
|
System.out.printf(output, args);
|
178
|
227
|
}
|
|
228
|
+
|
179
|
229
|
public static void println(String output, Object... args) {
|
180
|
230
|
print(output + "\n", args);
|
181
|
231
|
}
|
182
|
|
-
|
|
232
|
+
|
183
|
233
|
public String getStringInput(String prompt) {
|
184
|
234
|
Scanner s = new Scanner(System.in);
|
185
|
235
|
print(prompt);
|
186
|
236
|
return s.nextLine();
|
187
|
237
|
}
|
|
238
|
+
|
188
|
239
|
public Integer getIntegerInput(String prompt) {
|
189
|
240
|
Scanner s = new Scanner(System.in);
|
190
|
241
|
print(prompt);
|
|
@@ -211,6 +262,7 @@ public class Console {
|
211
|
262
|
return i;
|
212
|
263
|
|
213
|
264
|
}
|
|
265
|
+
|
214
|
266
|
public Double getDoubleInput(String prompt) {
|
215
|
267
|
Scanner s = new Scanner(System.in);
|
216
|
268
|
print(prompt);
|
|
@@ -232,15 +284,26 @@ public class Console {
|
232
|
284
|
println("Current display mode is: " + parse.getDisplayMode());
|
233
|
285
|
}
|
234
|
286
|
}
|
235
|
|
-
|
|
287
|
+
|
236
|
288
|
}
|
237
|
289
|
return d;
|
238
|
290
|
}
|
|
291
|
+
|
|
292
|
+ private void errMessage(){
|
|
293
|
+ while(true){
|
|
294
|
+ String clear = getStringInput("ERR\n");
|
|
295
|
+ if (clear.equalsIgnoreCase("clear")){
|
|
296
|
+ break;
|
|
297
|
+ }
|
|
298
|
+ }
|
|
299
|
+ }
|
|
300
|
+
|
239
|
301
|
public double getAngleInput(String prompt) {
|
240
|
302
|
Scanner s = new Scanner(System.in);
|
241
|
303
|
print(prompt);
|
242
|
304
|
return parse.getAngle(s.nextLine());
|
243
|
305
|
}
|
|
306
|
+
|
244
|
307
|
public void printGuide(){
|
245
|
308
|
println("Guide Under Construction");
|
246
|
309
|
}
|