Here is a java class I had to make for my data structures class. I know that this is far from the best way to do the conversion, but it is off of the pseudo code he gave in class and is therefor what he is looking for. The only thing he left for us to figure out on our own was for how the algorithm recognizes parenthesis. The program runs just fine when I input an expression without them, but the minute I add parenthesis the program won't run, specifically, through some debugging, I found that the close parenthesis does this ")". I marked with comments where the actual parenthesis part of the method is. Thanks for the help!
public class InToPost {
private Stack theStack;
private String infix;
private String postfix = "";
public InToPost(String in) {
infix = in;
int stackSize = infix.length();
theStack = new Stack(stackSize);
}
public String convert(){
for (int i = 0; i < infix.length(); i++) {
char ch = infix.charAt(i);
if ((ch == '0') || (ch == '1') || (ch == '2') || (ch == '3') || (ch == '4') ||
(ch == '5') || (ch == '6') || (ch == '7') || (ch == '8') || (ch == '9')) {
postfix = postfix + ch;
}
//check for parenthesis
else if (ch == ')'){
while (theStack.topStk() != '('){
int topStk = theStack.pop();
postfix = postfix + topStk;
}
theStack.pop();
} else {
while ((theStack.isEmpty() == false)&&(prcd(theStack.topStk(),ch) == true)){
char topSymb = theStack.pop();
postfix = postfix + topSymb;
}
theStack.push(ch);
}
}
while(theStack.isEmpty() == false){
char topSymb = theStack.pop();
postfix = postfix + topSymb;
}
return postfix;
}
public boolean prcd(char one, char two){
int onePrcd = 0;
int twoPrcd = 0;
if ((one == '+') || (one == '-')){
onePrcd = 1;
}
if ((two == '+') || (two == '-')){
twoPrcd = 1;
}
if ((one == '*') || (one == '/')){
onePrcd = 2;
}
if ((two == '*') || (two == '/')){
twoPrcd = 2;
}
if (one == '$') {
onePrcd = 3;
}
if (two == '$') {
twoPrcd = 3;
}
if (one == '(') {
onePrcd = 4;
}
if (two == '('){
twoPrcd = 4;
}
if (onePrcd >= twoPrcd){
return true;
} else {
return false;
}
}
public static void main(String[] args){
String input = "(2+3)*4";
String output;
InToPost theTrans = new InToPost(input);
output = theTrans.convert();
System.out.println("Postfix is " + output + '\n');
}
}