Java:找不到符号但输入正确

时间:2016-11-21 07:53:58

标签: java cannot-find-symbol

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

3 个答案:

答案 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));