File tree 8 files changed +122
-0
lines changed
8 files changed +122
-0
lines changed Original file line number Diff line number Diff line change
1
+ public class Add implements Operate {
2
+ @ Override
3
+ public Double getResult (Double ... numbers ){
4
+ Double sum = 0.0 ;
5
+
6
+ for (Double num : numbers ){
7
+ sum += num ;
8
+ }
9
+ return sum ;
10
+ }
11
+ }
Original file line number Diff line number Diff line change
1
+ import java .util .Arrays ;
2
+ import java .util .LinkedList ;
3
+ import java .util .Objects ;
4
+ import java .util .Queue ;
5
+
6
+ public class Calculator {
7
+ public static void main (String [] args ){
8
+ final String inputExp = ReadInput .read ();
9
+
10
+ Queue <String > operations ;
11
+ Queue <String > numbers ;
12
+
13
+ String [] numbersArr = inputExp .split ("[-+*/%]" );
14
+ // String[] operArr = inputExp.split("[0-9]+");
15
+ String [] operArr = inputExp .split ("\\ d+" );
16
+ numbers = new LinkedList <>(Arrays .asList (numbersArr ));
17
+ operations = new LinkedList <>(Arrays .asList (operArr ));
18
+
19
+ Double res = Double .parseDouble (Objects .requireNonNull (numbers .poll ()));
20
+
21
+ while (!numbers .isEmpty ()){
22
+ String opr = operations .poll ();
23
+
24
+ Operate operate ;
25
+ switch (Objects .requireNonNull (opr )){
26
+ case "+" :
27
+ operate = new Add ();
28
+ break ;
29
+ case "-" :
30
+ operate = new Sub ();
31
+ break ;
32
+ case "*" :
33
+ operate = new Multiply ();
34
+ break ;
35
+ case "/" :
36
+ operate = new Divide ();
37
+ break ;
38
+ case "%" :
39
+ operate = new Modulus ();
40
+ break ;
41
+ default :
42
+ continue ;
43
+ }
44
+ Double num = Double .parseDouble (Objects .requireNonNull (numbers .poll ()));
45
+ res = operate .getResult (res , num );
46
+ }
47
+
48
+ System .out .println (res );
49
+ }
50
+ }
Original file line number Diff line number Diff line change
1
+ public class Divide implements Operate {
2
+ @ Override
3
+ public Double getResult (Double ... numbers ){
4
+ Double div = numbers [0 ];
5
+
6
+ for (int i =1 ;i < numbers .length ;i ++){
7
+ div /= numbers [i ];
8
+ }
9
+ return div ;
10
+ }
11
+ }
Original file line number Diff line number Diff line change
1
+ public class Modulus implements Operate {
2
+ @ Override
3
+ public Double getResult (Double ... numbers ){
4
+ Double mod = numbers [0 ];
5
+
6
+ for (int i = 1 ; i < numbers .length ; i ++) {
7
+ mod %= numbers [i ];
8
+ }
9
+ return mod ;
10
+ }
11
+ }
Original file line number Diff line number Diff line change
1
+ public class Multiply implements Operate {
2
+ @ Override
3
+ public Double getResult (Double ... numbers ){
4
+ Double mul = 1.0 ;
5
+
6
+ for (Double num : numbers ){
7
+ mul *= num ;
8
+ }
9
+ return mul ;
10
+ }
11
+
12
+ }
Original file line number Diff line number Diff line change
1
+ public interface Operate {
2
+ Double getResult (Double ... numbers );
3
+ }
Original file line number Diff line number Diff line change
1
+ import java .util .Scanner ;
2
+
3
+ public class ReadInput {
4
+ public static String read (){
5
+ Scanner scanner = new Scanner (System .in );
6
+
7
+ System .out .println ("Input Expression Example: 4*3/2" );
8
+ String inputLine = scanner .nextLine ();
9
+
10
+ scanner .close ();
11
+ return inputLine ;
12
+ }
13
+ }
Original file line number Diff line number Diff line change
1
+ public class Sub implements Operate {
2
+ @ Override
3
+ public Double getResult (Double ... numbers ){
4
+ Double sub = numbers [0 ];
5
+
6
+ for (int i =1 ;i < numbers .length ;i ++){
7
+ sub -= numbers [i ];
8
+ }
9
+ return sub ;
10
+ }
11
+ }
You can’t perform that action at this time.
0 commit comments