USING JAVA I need to implement a stack and this is what I have so far. After tha
ID: 3683549 • Letter: U
Question
USING JAVA
I need to implement a stack and this is what I have so far.
After that I need to write a program called infixconverter that takes in a string containing an infix expression including (,), +, -, * and the integers and then outputs the postfix expression. I need to use the stack class for this as well.
public Stack(int c)
{
size = c;
stackArray = new long[size];
top = -1;
}
public boolean isEmpty()
{
return (top == -1);
}
public long pop()
{
return stackArray[top--];
}
public long top()
{
return stackArray[top];
}
public void push(long j)
{
stackArray[top++] = j;
}
//You are welcome to add any other private functions.
}
Explanation / Answer
import java.io.IOException;
import java.io.*;
public class infixconverter {
private Stack theStack;
private String input;
private String output = "";
public infixconverter(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;
case '*':
case '/':
gotOper(ch, 2);
break;
case '(':
theStack.push(ch);
break;
case ')':
gotParen(ch);
break;
default:
output = output + ch;
break;
}
}
while (!theStack.isEmpty()) {
output = output + theStack.pop();
}
System.out.println(output);
return output;
}
public void gotOper(char opThis, int prec1) {
while (!theStack.isEmpty()) {
char opTop = theStack.pop();
if (opTop == '(') {
theStack.push(opTop);
break;
}
else {
int prec2;
if (opTop == '+' || opTop == '-')
prec2 = 1;
else
prec2 = 2;
if (prec2 < prec1) {
theStack.push(opTop);
break;
}
else
output = output + opTop;
}
}
theStack.push(opThis);
}
public void gotParen(char ch){
while (!theStack.isEmpty()) {
char chx = theStack.pop();
if (chx == '(')
break;
else
output = output + chx;
}
}
public static void main(String[] args)
throws IOException,Exception {
InputStreamReader r=new InputStreamReader(System.in);
BufferedReader br=new BufferedReader(r);
System.out.println("Enter a Valid Infix Notation like (a+b) * ( 3-c+d) ");
String input =br.readLine();
String output;
infixconverter theTrans = new infixconverter(input);
output = theTrans.doTrans();
System.out.println("Postfix is " + output + ' ');
}
class Stack {
private int maxSize;
private char[] stackArray;
private int top;
public Stack(int max) {
maxSize = max;
stackArray = new char[maxSize];
top = -1;
}
public void push(char j) {
stackArray[++top] = j;
}
public char pop() {
return stackArray[top--];
}
public char peek() {
return stackArray[top];
}
public boolean isEmpty() {
return (top == -1);
}
}
}
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.