Java中缀计算器逻辑

标签 java logic calculator

我无法弄清楚动态中缀计算器的逻辑。我能够容纳具有 5 个元素的字符串值,例如“1 + 1”,但无法计算具有超过 5 个元素的字符串(即:“1 + 2 + 3 + 4”)。

这是我的流程

import java.util.StringTokenizer;

公共(public)静态int计算(字符串输入) { int lhs = 0; 整型右旋 = 0; 整数总计 = 0; 字符操作 = ' ';

    int intOne, intTwo;

    StringTokenizer st = new StringTokenizer(input);

    /*
     * this block is chosen if there are no operations
     */

    // block of if statement code for inputs less than or equal to
    // 5 characters.

        /*
         * this block generates the correct number if there is more than
         * one operator in the equation.
         */

    }else if(input.length() > 5){
        int firstValue = 0;
        int latterValue = 0;

        while(st.hasMoreTokens()){
            /*
             * method that assigns the left and right sides
             */

            //assigns values to the first equation
            int firstToken = Integer.parseInt(st.nextToken());
            String opToken = st.nextToken();
            int latterToken = Integer.parseInt(st.nextToken());

            //returns a value for the first equation
            firstValue = assignSides(firstToken, opToken, latterToken);

            // takes in the next operator
            if(st.nextToken().equals("+")){
                operation = '+';
            }else if(st.nextToken().equals("-")){
                operation = '-';
            }else if(st.nextToken().equals("*")){
                operation = '*';
            }else if(st.nextToken().equals("/")){
                operation = '/';
            }

            // assigns values to the latter equation
            firstToken = Integer.parseInt(st.nextToken());
            opToken = st.nextToken();
            latterToken = Integer.parseInt(st.nextToken());

            //returns a value for the latter equation
            latterValue = assignSides(firstToken, opToken, latterToken);

            /*
             * decides how to add the two equations
             */
            switch(operation){
            case '+': total = firstValue + latterValue;
            break;
            case '-': total = firstValue - latterValue;
            break;
            case '*': total = firstValue * latterValue;
            break;
            case '/': total = firstValue / latterValue;
            break;
            default: System.out.println("cannot compute");
            break;
            }

            if(st.hasMoreTokens()){
                //makes the total the first value
                total = firstValue; 

                if(st.nextToken().equals("+")){
                    operation = '+';
                }else if(st.nextToken().equals("-")){
                    operation = '-';
                }else if(st.nextToken().equals("*")){
                    operation = '*';
                }else if(st.nextToken().equals("/")){
                    operation = '/';
                }
            }
        }
    }
    return total;
}

public static int assignSides(int firstToken, String opToken, int latterToken)
{
    int lhs=0;
    int rhs = 0;
    int sum = 0;
    char operation = ' ';

    /*
     * converts the string into a character
     */
    if(opToken.equals("+")){
        operation = '+';
    }else if(opToken.equals("-")){
        operation = '-';
    }else if(opToken.equals("*")){
        operation = '*';
    }else if(opToken.equals("/")){
        operation = '/';
    }

    rhs = latterToken;

    /*
     * interprates the character as a function
     */
    switch(operation){
    case '+': sum = lhs + rhs;
    break;
    case '-': sum = lhs - rhs;
    break;
    case '*': sum = lhs * rhs;
    break;
    case '/': sum = lhs / rhs;
    break;
    default: System.out.println("cannot compute");
    break;
    }

    return sum;
}

我可以寻求帮助来解决我的逻辑错误吗?

最佳答案

当计算超过 3 个符号(不包括空格)时,如“1 + 2 + 3”,
您必须按以下顺序计算:1 + (2 + 3)。

您必须将前 1 部分和剩余部分“2 + 3”分开,并将剩余部分再次传递给计算方法。像这样的东西:

int firstPart = ...; // evaluation of "1"
int secondPart = calculate("2 + 3");

int total = firstPart + secondPart;

关于Java中缀计算器逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29526146/

相关文章:

java - 用于 Yubico OpenPGP 智能卡的 PGP 数据加密

java - 内存泄漏 - 调试器和内存分析器不同意

java - 从输入流java读取html

c - 如何获得3点之间的平均距离

java - 给出答案后计算器关闭

java - org.apache.chemistry.opencmis.client.api.CmisObject 上的 getRenditions() 返回 null

java - 如何使用 spring 或 struts 实现在多个屏幕之间导航的订单工作流程

process - VHDL : Multiple rising_edge detections inside a process block

swift - 有没有更有效的方法来在 Swift 中构建这种基于年龄组的 z 分数计算?

python - 循环简单计算器: will not loop back to original input