在计算Java中String的数值时控制很多ifs(“-3.1 + 0.12 * 0.0023-34.1 / 2.1”)

问题描述 投票:1回答:1

我想解决关于计算Java中String的数值的家庭作业,如"-3.1+0.12*0.0023-34.1/2.1"

我有限制只使用数组和字符串而不使用递归函数(作为一年级学生)

我尝试了什么?我试图通过char解析字符串char来解决它。

我只为+和 - 尝试这种方法:

public static double CalcPlusMinus(String s) {
    double A[] = new double[10000];
    if ((s.charAt(0) != '+') && (s.charAt(0) != '-'))
        s = '+' + s;
    int i = 0, j = 0;
    while (i < s.length()) {
        int flag = 1;
        if (s.charAt(i) == '-')
            flag = -1;
        i++;
        double m = 0;
        int end = 0;
        if ((s.charAt(i) >= '0') && (s.charAt(i) <= '9'))
            while ((s.charAt(i) >= '0') && (s.charAt(i) <= '9')) {
                m = m * 10 + (s.charAt(i) - '0');
                i++;
                if (i >= s.length()) {
                    end = 1;
                    break;
                }
            }
        if (end == 0)
            if (s.charAt(i) == '.') {
                i++;
                double x = 10;
                while ((s.charAt(i) >= '0') && (s.charAt(i) <= '9')) {
                    m = m + ((s.charAt(i) - '0') / x);
                    x *= 10;
                    i++;
                    if (i >= s.length())
                        break;
                }
            }
        A[j++] = m * flag;
    }
    A[A.length - 1] = j;
    for (int m = (int) A[A.length - 1] - 1; m > 0; m--) {
        A[m - 1] = A[m] + A[m - 1];
    }
    return A[0];
}

我想添加*和/到这个方法

但我的主要问题是:如何在我的代码中控制很多if-then-else。

有没有正式的方法来控制代码中的很多ifs?我知道流程图,但流程图也变得非常大!

提前致谢

java algorithm flowchart
1个回答
0
投票

您应该有3个单独的步骤:

  1. 解析/标记化 - 吐出“-3.1 + 0.12 * 0.0023-34.1 / 2.1”到:“ - ”“3.1”“+”“0.12”“*”“0.0023”“ - ”“34.1”“/”“2.1”
  2. 转换为Reverse Polish notation,使用数组作为堆栈
  3. 计算表达式的值
© www.soinside.com 2019 - 2024. All rights reserved.