gpt4 book ai didi

java - 错误不可转换类型 "intvalue()"

转载 作者:行者123 更新时间:2023-12-02 03:01:13 25 4
gpt4 key购买 nike

我有一个用 Java 计算 Lisp 表达式的程序,但我遇到了一个奇怪的错误。

首先,这是程序:

import java.util.Queue;
import java.util.LinkedList;
import java.util.Stack;
import java.util.ArrayList;


class IterativeEvaluator
{
private ExpressionScanner expression;

public IterativeEvaluator (String expression)
{
this.expression = new ExpressionScanner(expression);
}

public double evaluate(Queue<Double> operandqueue)
{
// write your code here to create an explicit context stack
Stack<Queue> temp_stack = new Stack<Queue>();

char operator = ' ';
double operand = 0.0;

// write your code here to evaluate the LISP expression iteratively
// you will need to use an explicit stack to push and pop context objects
while ( expression.hasNextOperator() || expression.hasNextOperand() )
{

// Get the open bracket

if ( expression.hasNextOperator())
{
operator = expression.nextOperator() ;
if (operator == '(')
{
// if the stack is empty then the first bracket is trivial
// so this method will be instantiated by null
if (temp_stack.empty())
temp_stack.push(operandqueue);
// else instantiate an arraylist(Queue)
else {
operandqueue = new LinkedList<Double>();
}
}

// push the list into the stack after the closing bracket appears
else if (operator == ')')
{
operand = calculate(operandqueue);
operandqueue = temp_stack.pop();
operandqueue.offer(operand);

}
// if it is another operator then it must be +,-,/,*
else {
operator = expression.nextOperator();
operandqueue.offer( (double) operator );
}
}
// else it is an operand so just put it in the queue
else
operandqueue.offer( (double) expression.nextOperand() );
}
return operand;
}

private double calculate(Queue<Double> some_queue)
{
char operator = (char) (some_queue.remove()).intvalue();
double operand1 = 0;
double operand2;
switch(operator){
case '+' : while( !some_queue.isEmpty() )
{
operand2 = some_queue.remove();
operand1 = operand1 + operand2;
}
break;

case '-' : operand1 = some_queue.remove();
//checks for negative numbers
if (some_queue.isEmpty() )
operand1 = 0 - operand1;
else{
while ( !some_queue.isEmpty() )
{
operand2 = some_queue.remove();
operand1 = operand1 - operand2;
}
}
break;

case '*' : operand1 = 1;
while ( !some_queue.isEmpty() )
{
operand2 = some_queue.remove();
operand1 = operand1*operand2;
}
break;

case '/' : operand1 = some_queue.remove();
if (some_queue.isEmpty() )
operand1 = 1/operand1 ;
else{
while (!some_queue.isEmpty())
{
operand2 = some_queue.remove();
operand1 = operand1/operand2; }
}
break;
}
return operand1;
}

public static void main(String [] args)
{
String s =
"(+\t(- 6)\n\t(/\t(+ 3)\n\t\t(- \t(+ 1 1)\n\t\t\t3\n\t\t\t1)\n\t\t(*))\n\t(* 2 3 4))"; // = 16.5
IterativeEvaluator myEvaluator = new IterativeEvaluator(s);
System.out.println("Evaluating LISP Expression:\n" + s);
System.out.println("Value is: " + myEvaluator.evaluate(null));
}
} /* 201340 */

编译时的错误是:

IterativeEvaluator2.java:69: cannot find symbol
symbol : method intvalue()
location: class java.lang.Double
char operator = (char) (some_queue.remove()).intvalue();
^
IterativeEvaluator2.java:69: inconvertible types
found : java.lang.Double.intvalue
required: char
char operator = (char) (some_queue.remove()).intvalue();
^
Note: IterativeEvaluator2.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
2 errors

关于为什么它不起作用有什么建议吗?我尝试转换表达式

char operator = (char) ( (int) some_queue.remove()).intvalue();

但这并没有解决我的问题。谢谢

最佳答案

方法名称中有拼写错误。 intValue 中的“V”大写(驼峰式) 。改变

intvalue();

intValue();

关于java - 错误不可转换类型 "intvalue()",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19987713/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com