В основном мне нужно сделать так, чтобы код превращал инфиксные уравнения в постфиксные, поэтому вот что я получил:
//Generics
public class Stack<T> {
private int maxStkSize = 100;
private int top = -1;
private Object[] stk;
public Stack() {
stk = new Object[maxStkSize];
}
public Stack(int n) {
if (n > 0) {
maxStkSize = n;
}
stk = new Object[maxStkSize];
}
public boolean isEmpty() {
return (top == -1);
}
public boolean isFull() {
if ((stk.length - 1) == maxStkSize) {
return true;
}
return false;
}
public int push(T el) {
if (isFull())
return -999;
stk[++top] = el;
return 1;
}
public T pop(){
if (isEmpty()) return null;
T el = (T) stk[top--];
return el;
}
public T peek(){
T el = (T) stk[top];
return el;
}
}
public class ArraysAndStacks {
static String infixToPostfix(String e) {
String[] arrayVar = e.split(" ");
Stack<String> s = new Stack();
String A,B;
for (int i = 0; i < arrayVar.length; ++i) {
if (arrayVar[i].equals("("))
s.push(arrayVar[i]);
else if (arrayVar[i].equals("^")){
String top = s.peek();
if (!top.equals("*") && !top.equals("/") && !s.isEmpty() && !top.equals("("))
s.push(arrayVar[i]);
}else if (arrayVar[i].equals("*") || arrayVar[i].equals("/")){
if (s.isEmpty())
s.push(arrayVar[i]);
else{
String top = s.peek();
if (!top.equals("+") && !top.equals("-") && !s.isEmpty() && !top.equals("(") &&
!s.isEmpty())
s.push(arrayVar[i]);
}
}else if (arrayVar[i].equals("+") || arrayVar[i].equals("-")){
if (s.isEmpty())
s.push(arrayVar[i]);
else{
String top = s.peek();
if (!s.isEmpty() && !top.equals("("))
s.push(arrayVar[i]);}
}else if (arrayVar[i].equals(')')){
String top = s.peek();
A = s.pop();
if (top.equals("(") && !s.isEmpty()){
s.pop();
if (top.equals("+") || top.equals("-") || top.equals("/") ||
top.equals("*") || top.equals("^")){
B = s.pop();
C = s.pop();
s.push(C+A+B);
}else if (!top.equals("+") && !top.equals("-") && !top.equals("/") &&
!top.equals("*") && !top.equals("^"))
B = s.pop();
C = s.pop();
//s.push(B+A); //PROBLEM WITH ")" symbol, does not compute 4 / () in the equation
}
}else if (!arrayVar[i].equals("+") && !arrayVar[i].equals("-") &&
!arrayVar[i].equals("*") && !arrayVar[i].equals("/") &&
!arrayVar[i].equals("^") && !arrayVar[i].equals(")")){
String top = s.peek();
if (top.equals("("))
s.push(arrayVar[i]);
else{
if(top.equals("+") || top.equals("-") || top.equals("*") ||
top.equals("/") || top.equals("^") ||
top.equals(")")){
B = s.pop();
A = s.pop();
s.push (A + arrayVar[i] + B);
}
}
}
}
return s.pop();
}
Кодирование работает, но вывод не такой, как ожидалось, если я ввод уравнение (4/(9-8+5)*3)
программа выводит 98-5+3*
вместо правильного ответа 498-5+/3*32^^
Я открыт для предложений, поскольку я пробовал много вещей чтобы по возможности это исправить, я не хочу использовать для этого char, так как было указано, что мы делаем это таким образом