在此之前我为分流码算法编写了一个方法,这里我想创建一个方法,以便我可以评估后缀表达式。我将调用此计算方法,以便我可以在后缀队列中执行它。
public String calculate(Queue post, Stack polish) {
我将队列出列并分成单独的令牌以供阅读
String token = post.Dequeue();
虽然有一个要阅读的令牌
while(!(token==null)) {
if(isOperator(token)) {
double operand_2 = Double.parseDouble(polish.pop());
double operand_1 = Double.parseDouble(polish.pop());
if(token.contains("+")) {
double result = operand_2 + operand_1;
}
else if(token.contains("-")) {
double convert = operand_2 - operand_1;
}
else if(token.contains("/")) {
double convert = operand_2/operand_1;
}
else if(token.contains("*")) {
double convert = operand_2/operand_1;
}
当我尝试将“convert”转换为String时,它告诉我转换无法解析为变量
String result = Double.toString(convert);
polish.push(result);
}
else if(isNumeric(token)){
polish.push(token);
}
String finalVal = polish.pop();
return finalVal;
}
}
答案 0 :(得分:1)
这是一个范围问题。声明变量时,声明将持续到下一个}
字符,而不是那些匹配的{
字符已经过去的字符。由于您在每个convert
或if
块中声明else if
,因此声明会持续到该块的结尾。
您需要做的是在所有double convert;
和if
语句之前声明else
,以便声明持续到您需要使用{{1}的位置}。
您可能还想给它一个初始值,例如convert
来处理运算符与double convert = 0;
和if
语句中的任何一个都不匹配的情况。否则,您可能会遇到不同的编译错误。
答案 1 :(得分:1)
您尚未在该范围内定义convert
。它没有被声明为变量,所以你得到了这个错误。
更改为:
double convert;
while(!(token==null)) {
if(isOperator(token)) {
double operand_2 = Double.parseDouble(polish.pop());
double operand_1 = Double.parseDouble(polish.pop());
if(token.contains("+")) {
double result = operand_2 + operand_1;
}
else if(token.contains("-")) {
convert = operand_2 - operand_1;
}
else if(token.contains("/")) {
convert = operand_2/operand_1;
}
else if(token.contains("*")) {
convert = operand_2/operand_1;
}