Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.Scanner;
- import java.util.ArrayList;
- /**
- * Calculates equations in the form of Strings
- *
- * @author Chris Koop
- * @version 1.0
- */
- public class StringCalc
- {
- public static void main(){
- Scanner inp = new Scanner(System.in);
- String equation;
- double equals=0.0;
- System.out.println("Enter an equation using only +, -, *, and / as operators, and parenthesis for ordering");
- equation = inp.next();
- try{
- equals = Double.parseDouble(equation);
- }catch(java.lang.NumberFormatException e){
- System.out.println("Calculating");
- ArrayList<Integer> operloc = new ArrayList<Integer>();
- ArrayList<String> oper = new ArrayList<String>();
- ArrayList<Double> nums = new ArrayList<Double>();
- equParse(equation, oper, operloc, nums);
- equals=nums.get(0);
- parenCalc(oper, operloc, nums, equation);
- equals=nums.get(0);
- }
- System.out.println(equals);
- }
- private static void equParse(String equation, ArrayList<String> oper, ArrayList<Integer> operloc, ArrayList<Double> nums){
- for (int i=0; i<equation.length(); i++){
- if (equation.substring(i, i+1).equals("+")||equation.substring(i, i+1).equals("-")||equation.substring(i, i+1).equals("*")||equation.substring(i, i+1).equals("/")||equation.substring(i, i+1).equals("(")||equation.substring(i, i+1).equals(")")){
- operloc.add(i);
- oper.add(equation.substring(i,i+1));
- oper.trimToSize();
- }
- }
- nums.add(Double.parseDouble(equation.substring(0,operloc.get(0))));
- oper.trimToSize();
- if(oper.size()>1){
- for (int i=1; i<oper.size(); i++){
- if(equation.substring(operloc.get(i-1)+1,operloc.get(i)+1).equals("(")||equation.substring(operloc.get(i-1)+1,operloc.get(i)+1).equals(")")){
- nums.add(Double.parseDouble(equation.substring(operloc.get(i)+1, operloc.get(i+1))));
- }else{
- nums.add(Double.parseDouble(equation.substring(operloc.get(i-1)+1, operloc.get(i))));
- }
- }
- }
- if(equation.substring(operloc.get(oper.size()-1)).equals("(")||equation.substring(operloc.get(oper.size()-1)).equals(")")){
- //nums.add(Double.parseDouble(equation.substring(operloc.get(oper.size()))));
- }else{
- nums.add(Double.parseDouble(equation.substring(operloc.get(oper.size()-1))));
- }
- }
- private static void parenCalc(ArrayList<String> oper, ArrayList<Integer> operloc, ArrayList<Double> nums, String equation){
- int insertLoc=0;
- ArrayList<Integer> noperloc = new ArrayList<Integer>();
- ArrayList<String> noper = new ArrayList<String>();
- ArrayList<Double> nnums = new ArrayList<Double>();
- for (int i=0; i<equation.length()-1; i++){
- if (equation.substring(i, i+1).equals("(")){
- for (int j=equation.length()-1; j>i; i--){
- if (equation.substring(j, j+1).equals(")")){
- String newEqu=equation.substring(i,j);
- int numOnums=0;
- int numOops=0;
- for (int k=0; k<equation.length(); k++){
- if (equation.substring(k, k+1).equals("+")||equation.substring(k, k+1).equals("-")||equation.substring(k, k+1).equals("*")||equation.substring(k, k+1).equals("/")||equation.substring(k, k+1).equals("(")||equation.substring(k, k+1).equals(")")){
- numOops++;
- }
- }
- for (int k=0; k<equation.length(); k++){
- if (equation.substring(k, k+1).equals("0")||equation.substring(k, k+1).equals("1")||equation.substring(k, k+1).equals("2")||equation.substring(k, k+1).equals("3")||equation.substring(k, k+1).equals("4")||equation.substring(k, k+1).equals("5")||equation.substring(k, k+1).equals("6")||equation.substring(k, k+1).equals("7")||equation.substring(k, k+1).equals("8")||equation.substring(k, k+1).equals("9")){
- numOnums++;
- }
- }
- for (int
- insertLoc=i;
- parenCalc(noper, noperloc, nnums, newEqu);
- break;
- }
- }
- calc(noper, nnums);
- nums.set(insertLoc,nnums.get(0));
- }
- }
- calc(oper, nums);
- }
- private static void calc(ArrayList<String> oper, ArrayList<Double> nums){
- for (int i=0; i<oper.size(); i++){
- if (oper.get(i).equals("*")){
- nums.set(i,nums.get(i)*nums.get(i+1));
- nums.remove(i+1);
- oper.remove(i);
- i--;
- }
- }
- for (int i=0; i<oper.size(); i++){
- if (oper.get(i).equals("/")){
- nums.set(i,nums.get(i)/nums.get(i+1));
- nums.remove(i+1);
- oper.remove(i);
- i--;
- }
- }
- for (int i=0; i<oper.size(); i++){
- if (oper.get(i).equals("+")){
- nums.set(i,nums.get(i)+nums.get(i+1));
- nums.remove(i+1);
- oper.remove(i);
- i--;
- }
- }
- for (int i=0; i<oper.size(); i++){
- if (oper.get(i).equals("-")){
- nums.set(i,nums.get(i)-nums.get(i+1));
- nums.remove(i+1);
- oper.remove(i);
- i--;
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment