I need help with how to handle parentheses when converting an infix equation to postfix through the use of a stack.
The program reads the equations in from a .txt file.

It works for the equations without parentheses, but not for those with parentheses.

I've attached the text file to this thread and here is my code:

import java.util.Scanner;
import java.io.*;
import java.lang.Character;



public class infixToPostfix {
	String fname;
	
	//  MAIN  ////////////////////////////////////
	public static void main(String[] args) {
		System.out.println("START main method...");
		infixToPostfix test = new infixToPostfix();
		System.out.println("END main method...");
	}
	//////////////////////////////////////////////
	
	public infixToPostfix() {
		System.out.println("starting infixToPostfix() method...");
		getFileName();
		readFileContents();
	}
	
	public void getFileName() {
		Scanner in = new Scanner(System.in);
		System.out.println("Enter file name please.");
		fname = in.nextLine();
		System.out.println("You entered " + fname);
	}
	
	public void readFileContents() {
		boolean looping;
		DataInputStream in;
		String line;
		int j, len;
		char ch;
		stackOb myStack = new stackOb(20);

		try {
			in = new DataInputStream(new FileInputStream(fname));
			looping = true;
			while (looping) {
			
				if (null == (line = in.readLine())) {
					looping = false;
					in.close();
				}
				else {
					myStack.reset();
					String postfixString = new String();
					System.out.println("infix line:    " + line);
					len = line.length();
					for (j = 0; j < len; j++) {
						if ((Character.isLetter(line.charAt(j)))||(Character.isDigit(line.charAt(j)))) {
							postfixString += line.charAt(j);
						}
						if ((line.charAt(j)=='+')||(line.charAt(j)=='-')||(line.charAt(j)=='*')) {
							if (myStack.empty()==true) {
								myStack.push(line.charAt(j));
							}
							else if (myStack.empty()==false) {
								if ((line.charAt(j)=='*')&&((myStack.peek()=='+')||(myStack.peek()=='-'))) {
									myStack.push(line.charAt(j));
								}
								else if (((line.charAt(j)=='+')||(line.charAt(j)=='-')) && (myStack.peek()=='*')) {
									postfixString += myStack.peek();
									myStack.pop();
									myStack.push(line.charAt(j));
								}
								else if (((line.charAt(j)=='+')||(line.charAt(j)=='-')) && ((myStack.peek()=='+')||(myStack.peek()=='-'))) {
									postfixString += myStack.peek();
									myStack.pop();
									myStack.push(line.charAt(j));
								}
							}
						}
					}
					while (myStack.empty()==false) {
						postfixString = postfixString + myStack.peek();
						myStack.pop();
					}
					System.out.println("postfix line:  " + postfixString);
				}// end else
			}// end while
		}// end try
		
		catch(IOException e) {
			System.out.println("Error " + e);
		} //end catch
	}
}


class stackOb {
	int top;
	char stack[];
	int maxLen;
	
	public stackOb(int maxLen) {
		stack = new char[maxLen];
		top = -1;
		maxLen = maxLen;
	}
	public char peek() {
		return stack[top];
	}
	public void push(char item) {
		top++;
		stack[top] = item;
	}
	public void pop() {
		top--;
	}
	public boolean empty() {
		if (top == -1) {
			return true;
		}
		else {
			return false;
		}
	}
	public void reset() {
		top = -1;
	}
	public void showStack() {
		int j;
		System.out.println("Stack contents ...");
		for(j=top;j>-1;j--) {
			System.out.println(stack[j]);
		}
	}
	public void showStack0toTop() {
		int j;
		System.out.println(" ");
		System.out.println("Stack contents ...");
		for(j=0;j<=top;j++) {
			System.out.print(stack[j]);
		}
		System.out.println(" ");
	}
}
Attachments
a + b
a * b
(a + b)*c
a + b * c
(a+b)*(c+d)
This article has been dead for over six months. Start a new discussion instead.