2

我试图编写一个通过相同方法的循环方法。应该循环的次数取决于用户输入的字符串的长度。例如,如果字符串是 1+2-3/4*3+2。该程序应该存储前 3 个数字和前 2 个运算符。然后执行操作顺序,对于这个,它将是 1+2-3 = 3-3。然后它应该从字符串中获取下一个运算符和下一个数字。这是我到目前为止的循环,它没有循环整个字符串并用新的数字和运算符更新它

public static double solveExpresion(String e) {
    double answer = 0;

    for (int i = 0; i < e.length(); i++) {
        String operand1;
        String operand2;
        String operand3;

        operand1 = getOperand(e);
        o1 = Double.parseDouble(operand1);

        operator1 = getOperator(expression);

        operand2 = getOperand(expression);
        o2 = Double.parseDouble(operand2);

        operator2 = getOperator(expression);

        operand3 = getOperand(expression);
        o3 = Double.parseDouble(operand3);

        answer = orderOfOperation(operator1, operator2);

    /*  operator2 = getOperator(expression);

        operand3 = getOperand(expression);
        o3 = Double.parseDouble(operand3);

        answer = orderOfOperation(operator1, operator2);*/
    }

    return (answer);
}

注意:我不允许使用任何类型的数组。

这些是我的 getOperand 和 getOperator 方法

public static String getOperand(String s) {
    s = s.trim();
    String num = "";

    while (s.length() > 0 && s.charAt(0) >= '0' && s.charAt(0) <= '9') {

        num = num + s.charAt(0);
        s = s.substring(1);

    }
    expression = s;

    return (num);
}

public static char getOperator(String s) {

    char r = 0;

    if (s.length() > 0) {

        r = s.charAt(0);
        s = s.substring(1);

    }

    expression = s;
    return (r);
}
4

1 回答 1

3

你的逻辑不完整。这是我将如何解决您的问题的大纲(伪代码):

double answer = getOperand(e);
while (not at end) {
    String operator = getOperator(e);
    double operand2 = getOperand(e);
    answer = orderOfOperation(answer, operator, operand2);
}
return answer;

answer这会随着下一个运算符/操作数不断更新。您想要这样做的原因是,在您评估了表达式的一部分(例如“1+2”)之后,字符串中的下一个内容(如果有的话)是一个运算符和下一个操作数。没有要读取的左操作数;相反,您应该使用到目前为止的答案。

另请注意,要使循环正常工作,第一个操作数必须已被使用(并分配给answer)。

请注意,您当前的测试(not at end)假设每个运算符和操作数都是一个字符长。当其中一个操作数大于 9 时,这不会很好地工作。

于 2012-11-05T21:08:45.007 回答