java - How to calculate an expression from left to right -


this question has answer here:

i creating maths quiz game outputs random arithmetic questions user. have function in creates questions , stores them in string array. questions can vary in amount of integers present in question; e.g. question can 3+4-9/3= or 4*2/9= minimum amount of integers must present 2. e.g. 3+4= etc.

what trying evaluate question reading left right ignoring order of operations. e.g. 4+2*5= should equal 30 instead of 14.

my thinking problem this:

get question, loop through string , extract individual characters , store them in arraylist. convert characters int , first evaluate first 3 elemtns in arraylist, store answer in temporary int value. next 2 elements , check if not contain equal sign, if doesn't evaluate the temporary int value these 2 elements. continue whilst doesn't find equals sign. if find equals sign stop iteration , produce result.

what problem cant seem convert operations +,-,*,/ int values. thought every char converted int.

public void initanswers(){    for(int =0; < questions.length; i++){        arraylist<integer> indivialintegers = new arraylist<>();        string questiontogetindividual = questions[0];        //extracting individual chars        for(int j = 0; j < questiontogetindividual.length(); j++){            indivialintegers.add(character.getnumericvalue(questiontogetindividual.charat(j)));        }    } 

edit = updated code. getting number format exception error. caused by: java.lang.numberformatexception: invalid int

can see why? way, wrote method generate questions (the amount of integes in questions randomly generated). stored in array. im iterating through each question in array , evaluating answer: starting function initanswers().

public int computeanswerthreeterms(int numberone, int numbertwo, string operation){    if(operation.equals("+")){        log.d("onc","in addition");        return numberone + numbertwo;    }else if(operation.equals("-")){        log.d("onc","in subtraction");        return numberone - numbertwo;    }else if(operation.equals("/")){        log.d("onc","in division");        return numberone / numbertwo;    }else if(operation.equals("*")){        log.d("onc","in multiplication");        return numberone * numbertwo;    }else{        return 0;    } }  public int computeanswer(int numberone, string operation, int runningtotal){      if(operation.equals("+")){         log.d("onc","in addition");         return numberone + runningtotal;     }else if(operation.equals("-")){         log.d("onc","in subtraction");         return numberone - runningtotal;     }else if(operation.equals("/")){         log.d("onc","in division");         return numberone / runningtotal;     }else if(operation.equals("*")){         log.d("onc","in multiplication");         return numberone * runningtotal;     }else{         return 0;     } }  public void getanswer(arraylist<string> tobeexamined){     //get numbers , put them in array     //get operations , put them in array     for(int =0; < tobeexamined.size(); i++){         string extractingintegers = tobeexamined.get(i);         // /d matches digits /d matches non digits         string[] numbersinstringformat = extractingintegers.split("/d");         arraylist<integer> numbersinnumberformat = new arraylist<>();         for(int counter = 0; counter < numbersinstringformat.length; counter++){             numbersinnumberformat.add(integer.parseint(numbersinstringformat[counter]));         }         string[] operationsinstringformat = extractingintegers.split("/d");          int tempanswer;         int tempintcounter =0;         int stringcounter =0;         tempanswer = computeanswerthreeterms(numbersinnumberformat.get(tempintcounter), numbersinnumberformat.get(tempintcounter+1), operationsinstringformat[stringcounter]);         tempintcounter = 1;         while(!operationsinstringformat[1].equals("=")){             if(operationsinstringformat[stringcounter].equals("=")){                 break;             }             tempanswer = computeanswer(numbersinnumberformat.get(tempintcounter++),operationsinstringformat[stringcounter],tempanswer);         }         answers[i] = tempanswer;      } }  public void initanswers(){     arraylist<string> individualcharacters = new arraylist<>();      for(int =0; < questions.length; i++){         //change 0 testing purposes        string questiontogetindividual = questions[i];        //extracting individual chars        individualcharacters.add(questiontogetindividual);     }     getanswer(individualcharacters); } 

what need to:

  • parse int[] of operands question (let's n items);
  • parse operator[] of operators (+-/*). it'd n-1 items. operator simple enum convertor char value & function apply operator 2 operands;
  • go in cycle through array of operators applying them current value & operand;

aslo, check question: what's library parsing mathematical expressions in java?


Comments

Popular posts from this blog

routing - AngularJS State management ->load multiple states in one page -

python - GRASS parser() error -

Swift game error message -