Question: in JAVA, I need to make the following code from infix to postfix for 2 stacks in order to calculate such as (2+3*5)-8/5*(5-2). The following

in JAVA, I need to make the following code from infix to postfix for 2 stacks in order to calculate such as (2+3*5)-8/5*(5-2).

The following code is to calculate only 1 stack such as 12/(1+11)*2.

=====================================================================================

import java.util.*;

public class Practice {

public static int evaluate(String expression){ char[] tokens = expression.toCharArray();

* // Stack for numbers Stack operandStack = new Stack();

// Stack for Operators Stack operatorStack = new Stack();

//using for is more natural here for (int i = 0; i < tokens.length; i++) { if (tokens[i] == ' ') continue; // Token is a number, push it to stack if (tokens[i] >= '0' && tokens[i] <= '9') { // There can be multi digit number. Create number as sring StringBuffer numberString = new StringBuffer();

while (i < tokens.length && tokens[i] >= '0' && tokens[i] <= '9') { numberString.append(tokens[i++]); } // Converting numberString to integer and adding to array operandStack.push(Integer.parseInt(numberString.toString())); }

// Encounter open bracket, push it to operator stack else if (tokens[i] == '(') operatorStack.push(tokens[i]);

// Encounter closing bracket, evaluate and push result back in operand stack else if (tokens[i] == ')') { while (operatorStack.peek() != '(') operandStack.push(evaluateOpeartion(operatorStack.pop(), operandStack.pop(), operandStack.pop())); operatorStack.pop(); }

// Encounter a operator else if (tokens[i] == '+' || tokens[i] == '-' || tokens[i] == '*' || tokens[i] == '/') { while (!operatorStack.empty() && isHigherPrecedence(tokens[i], operatorStack.peek())) { operandStack.push(evaluateOpeartion(operatorStack.pop(), operandStack.pop(), operandStack.pop())); }

// Push current token to 'ops'. operatorStack.push(tokens[i]); } }

while (!operatorStack.empty()) operandStack.push(evaluateOpeartion(operatorStack.pop(), operandStack.pop(), operandStack.pop()));

// operandStack now contain result return operandStack.pop(); }

// check for precendence order public static boolean isHigherPrecedence(char op1, char op2) { if (op2 == '(' || op2 == ')') return false; if ((op1 == '*' || op1 == '/') && (op2 == '+' || op2 == '-')) return false; else return true; }

// Evaluate result of operator on operand b and a public static int evaluateOpeartion(char op, int b, int a) { switch (op) { case '+': return a + b; case '-': return a - b; case '*': return a * b; case '/': if (b == 0) throw new UnsupportedOperationException("Cannot divide by zero"); return a / b; } return 0; }

// Test result public static void main(String[] args) { System.out.println(Practice.evaluate("900 / 10 * 2 + 6")); System.out.println(Practice.evaluate("12 / ( 1 + 11 ) * 2")); System.out.println(Practice.evaluate("(2+3*5)-8/5*(5-2)")); } }

Step by Step Solution

There are 3 Steps involved in it

1 Expert Approved Answer
Step: 1 Unlock blur-text-image
Question Has Been Solved by an Expert!

Get step-by-step solutions from verified subject matter experts

Step: 2 Unlock
Step: 3 Unlock

Students Have Also Explored These Related Databases Questions!