Skip to content

Commit 3684e18

Browse files
authored
Added Calculator
Created Calculator command line application using java's oops concepts
1 parent 904690c commit 3684e18

File tree

8 files changed

+122
-0
lines changed

8 files changed

+122
-0
lines changed

Calculator-OOPS/Add.java

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
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+
}

Calculator-OOPS/Calculator.java

+50
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
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+
}

Calculator-OOPS/Divide.java

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
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+
}

Calculator-OOPS/Modulus.java

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
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+
}

Calculator-OOPS/Multiply.java

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
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+
}

Calculator-OOPS/Operate.java

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
public interface Operate {
2+
Double getResult(Double... numbers);
3+
}

Calculator-OOPS/ReadInput.java

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
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+
}

Calculator-OOPS/Sub.java

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
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+
}

0 commit comments

Comments
 (0)