0

継承抽象クラスに関するいくつかのチュートリアルを行ってきましたが、合計価格を計算するために配列を関数に渡します。しかし、メインで関数を呼び出そうとすると、機能せず、メソッド呼び出しに従ってエラーが発生しました。

サブクラスの計算コードは次のとおりです。

public double calcPrice(String[] a, int[] qty, int num){
    int i =0;
    for(i=0;i<=num;i++) { 
        if (a[i]=="a")
            price=24.90;
    }

    double tot=price+qty[i];
    return tot;
}

これは for ループでのメソッド呼び出しです。エラーが「非静的メソッド calcPrice() は静的コンテキストから参照できません」と表示されるため、メソッドを呼び出す方法がわかりません

for(int i=0;i<=num;i++) {
    System.out.println("\t"+a[i]+"\t\t\t"+qty[i]+" "+calcPrice());
 }
4

3 に答える 3

2

メイン メソッドは静的であり、非静的コードを呼び出すことはできません。2 つの解決策があります。

  • 計算を実行するクラスのインスタンスを作成し、calcPriceそのインスタンスを呼び出します。

  • calcPrice静的にします。

クラスに関する調査を行っているため、オプション1をお勧めします。これはあなたにとって良い練習になるでしょう。

aまた、 variableを"a"と比較しないでください==.equals代わりに使用してください。理由については、このリンクを確認してください。

編集:

実装を必要とする抽象メソッドがないため、抽象クラスがこれにどのように関与するかはわかりません。

public class CalcClass{
    public double calcPrice(String[] a, int[] qty, int num){
        int i =0;
        for(i=0;i<=num;i++) { 
            if ("a".equals(a[i]))
               price=24.90;
        }

        double tot=price+qty[i];
        return tot;
    }
}

public class MainClass{
    public static void main(String[] args){
        //create instance of calc class
        CalcClass c = new CalcClass();
        //call calc price method on calcclass
        c.calcPrice(a, new int[]{1}, 1};
    }
}
于 2013-08-19T17:40:51.243 に答える
1

に変更-

public static double calcPrice(String[] a, int[] qty, int num){
    ...
}

main から呼び出す前に、オブジェクトを作成する必要があります。クラスがあるとしましょう-

public class Test {

    public void someMethod(){

    }

    public static void main(String... args){

      // Create an object first
      Test t = new Test();

      // Now you can use that non-static method someMethod
      t.someMethod();

    }

}

静的メソッドの場合、ロード時に存在します。

于 2013-08-19T17:41:13.483 に答える
0

メソッドは静的ではないため、メソッドを呼び出すにはインスタンスを作成する必要があります。

メソッドを静的にすると、クラスのインスタンスを作成せずに使用できるようになります。

ここで静的メソッドについて読みたいと思うかもしれません

于 2013-08-19T17:43:02.633 に答える