我创建了一个类Operator
和一个名为compare
的方法。但是,在我的程序中调用此方法时,我总是收到错误消息
InfixToPostfix.java:17: error: cannot find symbol
System.out.println(compare(op,op1));
^
symbol: method compare(Operator,Operator)
location: class InfixToPostfix
我想我没有犯任何法术错误。
public class Operator extends Token {
protected String val; //Modified by Qinjianhong Yang, 11/18/16
public boolean isOperator() { return true; }
public boolean isOperand() { return false; }
// helper method, returns (assigns) precedence for operators
protected int getPrec()
{
//modified by Qinjianhong Yang, 11/17/2016
if(this.val.equals("+") || this.val.equals("-")){
return 1;
}
else return 2;
}
// handy for comparing 2 operators
public static int compare( Operator a, Operator b )
{
if( a.getPrec() == b.getPrec() )
return 0;
else if( a.getPrec() < b.getPrec() )
return -1;
else
return 1;
}
public String getVal() { return this.val; }
public Operator( String v ) { this.val = v; }
}
我这样称呼这个函数:
Operator op = new Operator("+");
Operator op1 = new Operator("*");
System.out.println(compare(op,op1));
答案 0 :(得分:2)
我这样称呼这个函数:
Operator op = new Operator("+"); Operator op1 = new Operator("*"); System.out.println(compare(op,op1));
错误消息告诉我们代码在类InfixToPostfix
中,但使用compare
而没有任何限定符只会起作用
代表Operator
类内的代码,或
如果您使用静态导入:
import static Operator.compare;
否则,您必须告诉编译器compare
来自哪里:
System.out.println(Operator.compare(op,op1));
// ----------------^^^^^^^^^
附注:名称“compare
”表示您将Operator
作为一个整体进行比较,但您的compare
仅比较了运营商的优先级,忽略它的val
。例如,Operator.compare(new Operator("*"), new Operator("/"))
将返回0
,这是令人惊讶的。如果它只是比较优先级,我建议将其称为comparePrecedence
或类似。
答案 1 :(得分:1)
您必须使用:System.out.println(Operator.compare(op,op1));
。如果在其外部调用静态函数,则必须添加类名
答案 2 :(得分:0)
compare(op,op1)
方法为static
,因此您需要添加类名Operator
以调用它,如下所示:
System.out.println(Operator.compare(op,op1));