循环方法

时间:2012-11-05 20:56:43

标签: java loops while-loop calculator

我试图编写一个循环方法,通过相同的方法。应该循环的次数取决于用户输入的字符串的长度。例如,如果字符串是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);
}

1 个答案:

答案 0 :(得分: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时,这不会很好。