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'snitems); - parse
operator[]of operators (+-/*). it'dn-1items.operatorsimpleenumconvertorcharvalue & function applyoperator2 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
Post a Comment