我们为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对象。谢谢你的帮助!
答案 0 :(得分: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
对象并使用其中的所有内容,但这样可以保持简洁。