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