2013-08-31 5 views
-1

On nous a donné cette spécification pour la classe PercolationStats:référence statique à la méthode non statique

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 
} 

et à mettre en œuvre moyenne() et stddev(), nous avons dû utiliser une bibliothèque spéciale qui a une classe appelée StdStats:

public final class StdStats { 

private StdStats() { } 

/* All methods declared static. */ 

} 

J'essayé d'écrire quelque chose comme

public mean() { 

return StdStats.mean(); 

} 

mais je reçois l'erreur suivante:

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

Voici ce qui la génération on peut supposer qu'il:

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 --"); 
} 

Yat-il un moyen de se débarrasser de cette erreur sans changer la spécification? Je crois que nous sommes supposés être capables de faire des objets PercolationStats. Merci pour toute aide!

+0

pourriez-vous montrer le code qui est dans votre méthode 'main'? –

+2

_il est supposé être capable de faire des objets PercolationStats_ Oui, faites cela et appelez la méthode sur l'un de ces objets. –

+1

StdStats est un nom de classe. 'mean' est probablement une méthode d'instance de cette classe. Vous devez créer une instance de StdStats (peut-être via une sorte d'usine) et l'utiliser pour appeler 'mean'. Mais notez que vous devez sans doute fournir d'abord quelques données à cette instance pour qu'elle ait quelque chose pour calculer la moyenne de. –

Répondre

1

Vous ne pouvez pas accéder à une méthode non statique à partir de votre méthode main. Créez un nouvel objet et effectuez vos opérations dans ce constructeur.

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 --"); 
} 
} 

Je l'ai ajusté afin qu'il utilise vos noms de classe. Vous essayiez d'accéder à des méthodes non statiques à partir d'une méthode statique impossible. Lorsque vous accédez à une méthode statique, aucune méthode non statique n'est disponible pour la méthode statique à ce stade et entraîne toujours une erreur. Vous avez dû les séparer.

Eh bien, vous auriez pu également créer un objet PercolationStats dans votre méthode main et y avoir utilisé tout, mais cela reste concis.

+0

@Downvoter: 'StdStats' est une bibliothèque fournie par le cours Algorithms de Coursera. Mind expliquant la downvote? –

+0

Oui ... s'il vous plaît. Cela a résolu mon problème! – user1505713

Questions connexes