-3

我创建了一个类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));
4

3 回答 3

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或类似的。

于 2016-11-21T07:56:31.530 回答
1

你必须使用:System.out.println(Operator.compare(op,op1));。如果在它之外调用静态函数,则必须添加类名

于 2016-11-21T07:55:35.873 回答
0

compare(op,op1)方法是static,所以你需要添加类名Operator来调用它,如下所示:

System.out.println(Operator.compare(op,op1));
于 2016-11-21T07:56:45.860 回答