-1

PercolationStats クラスの仕様は次のとおりです。

public class PercolationStats {
   public PercolationStats(int N, int T)    // perform T independent computational experiments on an N-by-N grid
   public double mean()                     // sample mean of percolation threshold
   public double stddev()                   // sample standard deviation of percolation threshold
   public double confidenceLo()             // returns lower bound of the 95% confidence interval
   public double confidenceHi()             // returns upper bound of the 95% confidence interval
   public static void main(String[] args)   // test client, described below
}

mean() と stddev() を実装するには、StdStats というクラスを持つ特別なライブラリを使用する必要がありました。

public final class StdStats {

private StdStats() { }

/* All methods declared static. */

}

みたいなの書いてみた

public mean() {

return StdStats.mean();

}

しかし、次のエラーが表示されます。

Cannot make a static reference to the non-static method mean() from the type PercolationStats

おそらくそれを生成しているものは次のとおりです。

main() {

/* ... */

        System.out.println("-- Summary --\n");
        System.out.printf("mean\tstdev\t[lo\thi]\n\n");
        System.out.printf("%1.3f\t%.3f\t%.3f\t%.3f", PercolationStats.mean(), 
                          PercolationStats.stddev(), PercolationStats.confidenceLo(), PercolationStats.confidenceHi());

        System.out.println("-- End --");
}

仕様を変更せずにこのエラーを取り除く方法はありますか? PercolationStats オブジェクトを作成できるはずだと思います。助けてくれてありがとう!

4

1 に答える 1

1

メソッドから非静的メソッドにアクセスすることはできませんmain。新しいオブジェクトを作成し、そのコンストラクターで操作を実行します。

class PercolationStats {
 public static void main(String[] args){
  new PercolationStats ();
 }

 public PercolationStats() {
  System.out.println("-- Summary --\n");
  System.out.printf("mean\tstdev\t[lo\thi]\n\n");
  System.out.printf("%1.3f\t%.3f\t%.3f\t%.3f", mean(), 
                          stddev(), confidenceLo(), confidenceHi());

  System.out.println("-- End --");
 }
}

クラス名を使用するように調整しました。静的メソッドから非静的メソッドにアクセスしようとしましたが、これは不可能です。静的メソッドにアクセスすると、その時点で静的メソッドで使用できる非静的メソッドはなく、常にエラーになります。それらを分離する必要がありました。

PercolationStatsメソッドでオブジェクトを作成し、そこにあるすべてのものを使用することもできますmainが、これにより簡潔に保たれます。

于 2013-08-31T22:54:46.037 に答える