I have all my code for this. I have the code to read a txt file, write a txt file, convert the infix to postfix and evaluate it. I am now just having trouble putting it all together. I need it to read the text from a file convert each line to postfix and evaluate it, then write it to a seperate file. thanks for any help.
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++)
{
input.trim();
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();
}
output.trim();
// 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 = 0;
for(int j = 0; j < input.length(); j++)
{
char ch = input.charAt(j);
if(ch >= '0' && ch <= '9')
theStack.push2((int)(ch- '0'));
else{
int num2 = theStack.pop2();
int num1 = theStack.pop2();
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'));
break; */
case '+':
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.push2(result);
}
}//end FOR
result = theStack.pop2();
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
package project;
import collection.Postfix;
import collection.Stack;
import java.io.*;
public class Project22
{
public void readfile()
{
StringBuffer contents = new StringBuffer();
BufferedReader reader = null;
try
{
reader = new BufferedReader(new FileReader("testing\\Project2Input.txt"));
String line = null;
// Postfix b = new Postfix(line);
while((line = reader.readLine()) != null)
{
line.trim();
// b.evaluate();
contents.append(line).append(System.getProperty("line.separator"));
// System.out.println("Original Infix: " + line);
}
}//end TRY
catch(FileNotFoundException e)
{
System.out.println("File Not Found");
}
catch(IOException e)
{
System.out.println("Something went wrong with reading the file");
}
finally
{
try
{
if(reader != null)
{
reader.close();
}
}//end TRY
catch(IOException e)
{
e.printStackTrace();
}
}
System.out.println(contents.toString());
}
public void writefile()
{
PrintWriter writer = null;
try
{
writer = new PrintWriter(new FileWriter(new File("testing\\Project2Output.txt")));
writer.write("Krysten3");
}
catch(IOException e)
{
e.printStackTrace();
}
finally
{
writer.close();
}
}
public void convert()
{
String input = "3+4*5";
input.trim();
String output;
Postfix theTrans = new Postfix(input);
output = theTrans.doTrans();
System.out.println("Postfix is " + output + '\n');
}
public void answer()
{
String input = "345*+";
int output;
Postfix eval = new Postfix(input);
output = eval.evaluate();
System.out.println("Result = " + output);
}
public static void test()
{
String input;
Project22 a = new Project22();
a.readfile();
a.writefile();
a.convert();
a.answer();
}
}