-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比較していることを示唆していますが、演算子の優先度を比較するだけで、その を無視しています。たとえば、は を返しますが、これは驚くべきことです。優先順位のみを比較する場合は、それを呼び出すことをお勧めします。OperatorcomparevalOperator.compare(new Operator("*"), new Operator("/"))0comparePrecedence

于 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 に答える