инфикс к постфиксу без петель внутри петель - PullRequest
0 голосов
/ 09 апреля 2020

Итак, у меня есть задание написать инфикс для метода postfix без вложенных циклов (циклов в циклах), и я этого не заметил, и я написал длинный метод с вложенными циклами, есть идеи, как это исправить? Вот код Как я могу разделить их на меньший метод, пока есть стек?

List<String> infix2Postfix(List<String> infix) {
        Stack<String> opStack = new Stack<>();
        List<String> outPut = new ArrayList<>();


        for (String inComing : infix) {
            // When incoming is  one of  -,+,*,/,^
            if (OPERATORS.contains(inComing)) {
                if (opStack.empty() || opStack.peek().equals("(")) {
                    ....
                } else {
                    ....
                    if (inComingP == 4 && inComingP == operatorP) {
                        ....
                    } else if (inComingP == operatorP) {
                       ...

                    } else if (inComingP < operatorP) {

                        while (!opStack.empty() && !opStack.peek().equals("(")) {
                          ...
                        }
                        opStack.push(inComing);

                    } else {
                        opStack.push(inComing);
                    }
                }

            }
            // when incoming is one of "(" , ")"
            else if ("()".contains(inComing)) {
                if (")".equals(inComing)) {

                    while (opStack.size() != 0 && !opStack.peek().equals("(")) {
                       ...
                    }
                    if (opStack.size() == 0) {
                        ...
                    } else {
                        opStack.pop(); 
                    }


                } else {
                    opStack.add(inComing);
                }

            } else {
                outPut.add(inComing);
            }

        }

        if (opStack.contains("(")) {
            throw new IllegalArgumentException(MISSING_OPERATOR);
        }
        while (!opStack.empty()) {

            outPut.add(opStack.pop());

        }
        return outPut;
    }
...