Skip to content

Instantly share code, notes, and snippets.

@Ashkan4472
Created October 9, 2019 13:21
Show Gist options
  • Save Ashkan4472/1641f73f775fffeeb98d6f46cba90444 to your computer and use it in GitHub Desktop.
Save Ashkan4472/1641f73f775fffeeb98d6f46cba90444 to your computer and use it in GitHub Desktop.
a simple string calculator in java
import java.util.ArrayList;
import java.util.Scanner;
public class StringCalculator {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
ArrayList<Double> numbers = new ArrayList<>();
ArrayList<Character> operators = new ArrayList<>();
String number = "";
// getting the user expression.
String expression = scanner.nextLine();
scanner.close();
for (int i = 0; i < expression.length(); i++) {
switch (expression.charAt(i)) {
case '+': {
operators.add('+');
numbers.add(Double.parseDouble(number));
number = "";
break;
}
case '-': {
operators.add('-');
numbers.add(Double.parseDouble(number));
number = "";
break;
}
case '*': {
operators.add('*');
numbers.add(Double.parseDouble(number));
number = "";
break;
}
case '/': {
operators.add('/');
numbers.add(Double.parseDouble(number));
number = "";
break;
}
case '^': {
operators.add('^');
numbers.add(Double.parseDouble(number));
number = "";
break;
}
case ' ': {
break;
}
default: {
number += expression.charAt(i);
}
}
}
// adding the last number
numbers.add(Double.parseDouble(number));
// calculate ^
for (int i = 0; i < operators.size(); i++) {
if (operators.get(i) == '^') {
numbers.set(i, Math.pow(numbers.get(i), numbers.get(i + 1)));
numbers.remove(i + 1);
operators.remove(i);
i--;
}
}
// calculate * and /
for (int i = 0; i < operators.size(); i++) {
if (operators.get(i) == '*') {
numbers.set(i, (numbers.get(i) * numbers.get(i + 1)));
numbers.remove(i + 1);
operators.remove(i);
i--;
} else if (operators.get(i) == '/') {
numbers.set(i, (numbers.get(i) / numbers.get(i + 1)));
numbers.remove(i + 1);
operators.remove(i);
i--;
}
}
// calculate + and -
for (int i = 0; i < operators.size(); i++) {
if (operators.get(i) == '+') {
numbers.set(i, (numbers.get(i) + numbers.get(i + 1)));
numbers.remove(i + 1);
operators.remove(i);
i--;
} else if (operators.get(i) == '-') {
numbers.set(i, (numbers.get(i) - numbers.get(i + 1)));
numbers.remove(i + 1);
operators.remove(i);
i--;
}
}
System.out.println(expression + " = " + numbers.get(0));
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment