My program below is suppose to take in a infix expression and translate it to a
ID: 3550825 • Letter: M
Question
My program below is suppose to take in a infix expression and translate it to a postfix expression, but I need a way for the user to be able to input the expression using a scanner and output the postfix. Can someone help me with this and make any changes to my program to make it work? Thank you! I know there is no main method, but that is what I need help writing to make it run properly.
import java.util.Scanner;
import java.util.Stack;
public class InfixToPostfix {
private final char ADD = '+';
/** constant for subtraction symbol */
private final char SUBTRACT = '-';
/** constant for multiplication symbol */
private final char MULTIPLY = '*';
/** constant for division symbol */
private final char DIVIDE = '/';
private Stack stack;
public String expression;
public char a;
char top;
String result = "";
int value2;
public InfixToPostfix(String b){
expression = b;
int sizeOfExpression = expression.length();
stack = new Stack();
}
public String operator()
{
for (int i = 0; i < expression.length(); i++)
a = expression.charAt(i);
switch (a)
{
case ADD:
onStack(a,1);
break;
case SUBTRACT:
onStack(a,1);
break;
case MULTIPLY:
onStack(a,2);
break;
case DIVIDE:
onStack(a,2);
default:
result = result + a;
break;
}
while (!stack.isEmpty())
{
result = result + stack.pop();
}
return result;
}
public void onStack(char a, int value1)
{
while (!stack.isEmpty())
{
top = (char) stack.pop();
if (top == '+' || top == '-')
value2 = 1;
else value2 = 2;
if (value2 < value1)
{stack.push(top);
}
else
result = result + top;
}
stack.push(a);
}
// TODO Auto-generated method stub
}
Explanation / Answer
// sample run
// Enter infix(input empty to quit): 1+2-3*2
// Postfix: 12+32*-
//
// Enter infix(input empty to quit): 1*2-3*4
// Postfix: 12*34*-
import java.util.Scanner;
import java.util.Stack;
public class InfixToPostfix {
private final char ADD = '+';
/** constant for subtraction symbol */
private final char SUBTRACT = '-';
/** constant for multiplication symbol */
private final char MULTIPLY = '*';
/** constant for division symbol */
private final char DIVIDE = '/';
private Stack stack;
public String expression;
public char a;
char top;
String result = "";
int value2;
public InfixToPostfix(String b){
expression = b;
int sizeOfExpression = expression.length();
stack = new Stack();
}
public String operator() {
for (int i = 0; i < expression.length(); i++)
{
a = expression.charAt(i);
switch (a)
{
case ADD:
onStack(a,1);
break;
case SUBTRACT:
onStack(a,1);
break;
case MULTIPLY:
onStack(a,2);
break;
case DIVIDE:
onStack(a,2);
default:
result = result + a;
break;
}
}
while (!stack.isEmpty())
{
result = result + stack.pop();
}
return result;
}
public void onStack(char a, int value1)
{
while (!stack.isEmpty())
{
top = (char) stack.pop();
if (top == '+' || top == '-')
value2 = 1;
else value2 = 2;
if (value2 < value1)
{
stack.push(top);
break;
}
else
result = result + top;
}
stack.push(a);
}
public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
String exp = "";
do
{
System.out.print("Enter infix(input empty to quit): ");
exp = input.nextLine().trim();
if (!exp.isEmpty())
{
InfixToPostfix infix = new InfixToPostfix(exp);
System.out.println("Postfix: " + infix.operator());
System.out.println();
}
} while (!exp.isEmpty());
}
}
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.