java - 在 Java 中计算 String 的数值时控制很多 ifs,例如 ("-3.1+0.12*0.0023-34.1/2.1")

标签 java algorithm flowchart

我想解决我的家庭作业,如 "-3.1+0.12*0.0023-34.1/2.1"

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

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

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

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? 我知道流程图,但流程图也变成了一个非常大的图景!!

最佳答案

您应该有 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. 计算表达式的值

关于java - 在 Java 中计算 String 的数值时控制很多 ifs,例如 ("-3.1+0.12*0.0023-34.1/2.1"),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47985200/

相关文章:

java - 如何使用 Selenium 在框架内执行 javascript?

java - 关闭后重新显示对话框

java - 不知从何而来的空字符串。

java - 高效地比较数千个文件 Java

流程图和伪代码的 C++ 代码

java - 实现一个目标,两种目的

c++ - 使用 HashMap 而不是邻接矩阵实现 maxflow 算法

algorithm - 如何找到由线连接的两点之间的路径

diagram - 如何在流程图中交替顺序?

html - 使用 css 和 html 绘制带有五边形的框图