I'm trying to evaluate postfix expressions but i cannot get it right. I always get the result value as 0 and in my evaluate method it keeps saying my num1 num2 and result have not been initialized. Any help is appreciated.
package collection;
import java.io.*;
public class Postfix {
private Stack theStack;
private String input;
private String output = "";
public Postfix(String in) {
input = in;
int stackSize = input.length();
theStack = new Stack(stackSize);
}
public String doTrans()
{
for (int j = 0; j < input.length(); j++)
{
char ch = input.charAt(j);
switch (ch) {
case '+':
case '-':
gotOper(ch, 1);
break; // (precedence 1)
case '*': // it's * or /
case '/':
gotOper(ch, 2); // go pop operators
break; // (precedence 2)
case '(': // it's a left paren
theStack.push(ch); // push it
break;
case ')': // it's a right paren
gotParen(ch); // go pop operators
break;
default: // must be an operand
output = output + ch; // write it to output
break;
}
}
while (!theStack.isEmpty()) {
output = output + theStack.pop();
}
System.out.println(output);
return output; // return postfix
}
public void gotOper(char opThis, int prec1) {
while (!theStack.isEmpty()) {
char opTop = theStack.pop();
if (opTop == '(') {
theStack.push(opTop);
break;
}// it's an operator
else {// precedence of new op
int prec2;
if (opTop == '+' || opTop == '-')
prec2 = 1;
else
prec2 = 2;
if (prec2 < prec1) // if prec of new op less
{ // than prec of old
theStack.push(opTop); // save newly-popped op
break;
} else
// prec of new not less
output = output + opTop; // than prec of old
}
}
theStack.push(opThis);
}
public void gotParen(char ch)
{
while (!theStack.isEmpty())
{
char chx = theStack.pop();
if (chx == '(')
break;
else
output = output + chx;
}
}
public int evaluate()
{
Stack theStack = new Stack(50);
int result;
for(int j = 0; j < input.length(); j++)
{
char ch = input.charAt(j);
switch(ch)
{
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
theStack.push((char)(ch - '0'));
case '+':
int num1; int num2;
result = num1 + num2;
break;
case '-':
result = num1 - num2;
break;
case '*':
result = num1 * num2;
break;
case '/':
result = num1 / num2;
break;
case '%':
result = num1 % num2;
break;
default:
result = 0;
}//end SWITCH
theStack.push((char) result);
}//end FOR
result = theStack.pop();
return result;
}
public String getString() throws IOException
{
InputStreamReader isr = new InputStreamReader(System.in);
BufferedReader br = new BufferedReader(isr);
String s = br.readLine();
return s;
}
}//end Class