Калькулятор postfix JAVA

201
29 марта 2018, 09:03

Сделал все по алгоритму
Сначала перевод infix в postfix и запись операндов в стек метод convert()
Далее метод который все это считает calculate()
Не могу понять где ошибся

Класс SimpleCalculatorApp, он же Main

package SimpleCalculator;
public class SimpleCalculatorApp {
public static void main(String[] args) {
    InfixToPostfix.convert(String.valueOf(2+2));
}
}

Класс InfixToPostfix

package SimpleCalculator;
import java.util.HashMap;
import java.util.Map;
public class InfixToPostfix {
public static void convert (String infix){
    Stos stack = new Stos(10);
    StringBuffer postfix = new StringBuffer(infix.length());
    Map<Character, Integer> map = new HashMap<>();
    map.put('+', 1);
    map.put('-', 1);
    map.put('*', 2);
    map.put('/', 2);
    map.put('%', 2);
    map.put('(', -1);
    map.put(')', -1);
    char ch;
    for (int i = 0; i < infix.length(); i++) {
        ch = infix.charAt(i);
        if (!isOperator(ch))
            postfix.append(ch);
        else {
            if (isOperator(ch))
                processOperator(ch, map, stack, postfix);
             else {
                System.err.println("Not a statement");
                while (!stack.empty())
                    stack.pop();
            }
        }
    }
    calculate(postfix);
}
private static void processOperator(char op, Map<Character, Integer> map, Stos stack, StringBuffer postfix){
    if (stack.empty() || op == '(') {
        stack.push(op);
    } else {
        char topOp = (char) stack.peek();
        if (map.get(op) > map.get(topOp)) {
            stack.push(op);
        }else {
            while (!stack.empty() && map.get(op) <= map.get(topOp)){
                postfix.append(topOp);
                stack.pop();
                if (!stack.empty()) {
                    topOp = (char) stack.peek();
                    if (op != ')') {
                        stack.push(op);
                    }
                }
            }
        }
    }

}
private static boolean isOperator(char ch){
    return ch == '+' || ch == '-' || ch == '*' || ch == '/' || ch == '%' || ch == '(' || ch == ')';
}
protected static void calculate(StringBuffer postfix){
    Stos stackCalculate = new Stos(30);
    int result = 0;
    for (int i = 0; i < postfix.length(); i++){
        char c = postfix.charAt(i);
        if (!isOperator(c))
            stackCalculate.push(c);
        else if (isOperator(c)){
            int num1 = stackCalculate.pop();
            int num2 = stackCalculate.pop();
            switch (c){
                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;
            }
            stackCalculate.push(result);
        }
    }
    result = stackCalculate.pop();
    System.out.println(result);
}
}

Класс Stos, он же стек

package SimpleCalculator;
public class Stos implements Stack {
private int maxSize;
private int[] stackArray;
private int top;
public Stos(int s) {
    maxSize = s;
    stackArray = new int[maxSize];
    top = -1;
}
@Override
public boolean empty() {
    return (top == -1);
}
@Override
public void push(int j) {
    stackArray[++top] = j;
}
@Override
public int pop() {
    return stackArray[top--];
}
@Override
public int peek() {
    return stackArray[top];
}
}

Интерфейс Stack

package SimpleCalculator;
public interface Stack {
boolean empty();
void push(int j);
int pop();
int peek();
}
READ ALSO
Событие на зажатие

Событие на зажатие

есть GridView, мне нужно если я зажму,выйдет вспылвающее окно, так вот

186
JSP Вывод json в цикле

JSP Вывод json в цикле

Мне приходит подобный JSON-массив:

200
JavaFx, ProgressBar and etc

JavaFx, ProgressBar and etc

Ребята, я только осваиваю Джаву и программирование в целомПрошу помощи

153
File Manager хочу реализовать

File Manager хочу реализовать

Обьясните, как программа видет стандартные иконки, pdf,mpr,jpgКак при открытие он сам знал какая программа ему нужна? И как вывести меню на удержание...

156