Машина добавления стека не добавляет, но зависает в ожидании большего количества аргументов

поэтому у меня есть стек, который я построил, и у меня есть машина для оценки выражений, таких как (9 + 0), и они могут быть более сложными. Я запускаю это весело из командной строки, а затем, когда я набираю пример (9 + 5), программа просто сидит там. Я могу получить новую строку, но выражение неТ оценить. Поэтому мой вопрос в том, что я пропустил. Я уверен, что есть что-то, чего у меня нетЯ правильно понял, и мне показалось, что я что-то упускаю из-за сканера или массивов в Java в целом.

Возможно, я думал прошлой ночью, что мне следует заменить массивы на ArrayList. Имеет ли это смысл?

Вот стек с фиксированной емкостью}

public class FCStack {

private Item[] a; 
private int top; // pointer to top of Stack
private int capacity; // size of the Stack+1

public FCStack(int cap){
    capacity = cap;
    a = (Item[]) new Object[capacity];   
    top = 0;
}

public void push(Item i){ //will only push an Item to the Stack if there is room. 
    if (!isFull()) {
        a[top++] = i;
    }
}

public Item pop(){ //will only pop an Item from the stack if there is something to pop.
    if (!isEmpty()) {
        --top;
    }
    return a[top];
}

public boolean isFull(){ //returns true if is full
    return top == capacity;
}

public boolean isEmpty(){ //returns true if is empty
    return top == 0; 
}

public int size(){ //returns the current size of the stack+1 or the array index 
    return top;
}

Вот два стека Evaluator}

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

public class TwoStackMaths {

public static void main (String[] args) {
    FCStack ops = new FCStack(10);
    FCStack vals = new FCStack(10);
    Scanner console = new Scanner(System.in);
    while(console.hasNext()) {
        String str = console.next();
        if (str.equals("("))
            ;
        else if (str.equals("+")) {
            ops.push(str);
        }
        else if (str.equals("-")) {
            ops.push(str);
        }
        else if (str.equals("*")) {
            ops.push(str); 
        }
        else if (str.equals("/")) {
            ops.push(str);
        }
        else if (str.equals("^")) {
            ops.push(str);
        }
        else if (str.equals(")")) {
            String op = ops.pop();
            double v = vals.pop();
            if (op.equals("+")) {
                v = vals.pop() + v;
            }
            else if (op.equals("-")) {
                v = vals.pop() - v;
            }
            else if (op.equals("*")) {
                v = vals.pop() * v;
            }
            else if (op.equals("/")) {
                v = vals.pop() / v;
            }
            else if (op.equals("^")) {
                v = Math.pow(v, vals.pop());
            }
            vals.push(v);
        }
        else {
        vals.push(Double.parseDouble(str));
        }
    }
    //console.close();
    System.out.println(vals.pop());
}

Ответы на вопрос(1)

Ваш ответ на вопрос