EmperorPhoenix

String Calculator

Aug 4th, 2015
239
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.79 KB | None | 0 0
  1. import java.util.Scanner;
  2. import java.util.ArrayList;
  3. /**
  4.  * Calculates equations in the form of Strings
  5.  *
  6.  * @author Chris Koop
  7.  * @version 1.0
  8.  */
  9. public class StringCalc
  10. {
  11.     public static void main(){
  12.         Scanner inp =  new Scanner(System.in);
  13.         String equation;
  14.         double equals=0.0;
  15.         System.out.println("Enter an equation using only +, -, *, and / as operators, and parenthesis for ordering");
  16.         equation = inp.next();
  17.         try{
  18.             equals = Double.parseDouble(equation);
  19.         }catch(java.lang.NumberFormatException e){
  20.             System.out.println("Calculating");
  21.             ArrayList<Integer> operloc = new ArrayList<Integer>();
  22.             ArrayList<String> oper = new ArrayList<String>();
  23.             ArrayList<Double> nums = new ArrayList<Double>();
  24.             equParse(equation, oper, operloc, nums);
  25.             equals=nums.get(0);
  26.             parenCalc(oper, operloc, nums, equation);
  27.             equals=nums.get(0);
  28.         }
  29.         System.out.println(equals);
  30.     }
  31.     private static void equParse(String equation, ArrayList<String> oper, ArrayList<Integer> operloc, ArrayList<Double> nums){
  32.         for (int i=0; i<equation.length(); i++){
  33.             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(")")){
  34.                 operloc.add(i);
  35.                 oper.add(equation.substring(i,i+1));
  36.                 oper.trimToSize();
  37.             }
  38.         }
  39.         nums.add(Double.parseDouble(equation.substring(0,operloc.get(0))));
  40.         oper.trimToSize();
  41.         if(oper.size()>1){
  42.             for (int i=1; i<oper.size(); i++){
  43.                 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(")")){
  44.                     nums.add(Double.parseDouble(equation.substring(operloc.get(i)+1, operloc.get(i+1))));
  45.                 }else{
  46.                     nums.add(Double.parseDouble(equation.substring(operloc.get(i-1)+1, operloc.get(i))));
  47.                 }
  48.             }              
  49.         }
  50.         if(equation.substring(operloc.get(oper.size()-1)).equals("(")||equation.substring(operloc.get(oper.size()-1)).equals(")")){
  51.                     //nums.add(Double.parseDouble(equation.substring(operloc.get(oper.size()))));
  52.                 }else{
  53.                     nums.add(Double.parseDouble(equation.substring(operloc.get(oper.size()-1))));
  54.                 }
  55.     }
  56.     private static void parenCalc(ArrayList<String> oper, ArrayList<Integer> operloc, ArrayList<Double> nums, String equation){
  57.         int insertLoc=0;
  58.         ArrayList<Integer> noperloc = new ArrayList<Integer>();
  59.         ArrayList<String> noper = new ArrayList<String>();
  60.         ArrayList<Double> nnums = new ArrayList<Double>();
  61.         for (int i=0; i<equation.length()-1; i++){
  62.             if (equation.substring(i, i+1).equals("(")){
  63.                 for (int j=equation.length()-1; j>i; i--){
  64.                     if (equation.substring(j, j+1).equals(")")){
  65.                         String newEqu=equation.substring(i,j);
  66.                         int numOnums=0;
  67.                         int numOops=0;
  68.                         for (int k=0; k<equation.length(); k++){
  69.                             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(")")){
  70.                                 numOops++;
  71.                             }
  72.                         }
  73.                         for (int k=0; k<equation.length(); k++){
  74.                             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")){
  75.                                 numOnums++;
  76.                             }
  77.                         }
  78.                         for (int
  79.                         insertLoc=i;
  80.                         parenCalc(noper, noperloc, nnums, newEqu);
  81.                         break;
  82.                     }
  83.                 }
  84.                 calc(noper, nnums);
  85.                 nums.set(insertLoc,nnums.get(0));
  86.             }
  87.         }
  88.         calc(oper, nums);
  89.     }
  90.     private static void calc(ArrayList<String> oper, ArrayList<Double> nums){    
  91.         for (int i=0; i<oper.size(); i++){
  92.             if (oper.get(i).equals("*")){
  93.                 nums.set(i,nums.get(i)*nums.get(i+1));
  94.                 nums.remove(i+1);
  95.                 oper.remove(i);
  96.                 i--;
  97.             }
  98.         }
  99.         for (int i=0; i<oper.size(); i++){
  100.             if (oper.get(i).equals("/")){
  101.                 nums.set(i,nums.get(i)/nums.get(i+1));
  102.                 nums.remove(i+1);
  103.                 oper.remove(i);
  104.                 i--;
  105.             }
  106.         }
  107.         for (int i=0; i<oper.size(); i++){
  108.             if (oper.get(i).equals("+")){
  109.                 nums.set(i,nums.get(i)+nums.get(i+1));
  110.                 nums.remove(i+1);
  111.                 oper.remove(i);
  112.                 i--;
  113.             }
  114.         }
  115.         for (int i=0; i<oper.size(); i++){
  116.             if (oper.get(i).equals("-")){
  117.                 nums.set(i,nums.get(i)-nums.get(i+1));
  118.                 nums.remove(i+1);
  119.                 oper.remove(i);
  120.                 i--;
  121.             }
  122.         }
  123.     }
  124. }
Advertisement
Add Comment
Please, Sign In to add comment