2010-09-14 6 views
2

Je voudrais donc commencer par vous dire que j'apprends Java par moi-même et que vous êtes la chose la plus proche de mes professeurs. Merci beaucoup d'avoir accepté ma question simple et évidente. J'essaie juste d'apprendre. Une fois de plus, je reçois une erreur que je n'arrive pas à comprendre pour la vie.Problème avec la programmation orientée objet en Java

Voici l'erreur:

Exception in thread "main" java.lang.NullPointerException 
at Advisor_score.All_user.Score1(All_user.java:13) 
at Advisor_score.All_user.main(All_user.java:28) 

Voici mon code pour la note classe:

package Advisor_score; 
public class Rating { 
    double [] Ratings; 
    double sum=0; 
    double raw_advisor; 
    double advisor_score; 
public Rating (double [] x){ 
     Ratings = x; 
     } 

public double Score(){ 
for(int i=2;i<Ratings.length;i++){ 
    sum+=Ratings[i]; 
} 
raw_advisor=((sum-(3*(Ratings.length-2)))/4); 
advisor_score= 2.5+(2.5*(1-Math.pow(Math.E, -.5*raw_advisor))); 
return advisor_score; 
} 

Voici mon code pour l'autre classe:

package Advisor_score;  

public class All_user{ 
     double [] ADVISOR_SCORE; 
     Rating [] All_users; 
     double score; 
     public All_user(Rating...args){ 
       All_users=args; 
      } 

     public double [] Score1(){ 
      for (int j = 0;j<All_users.length;j++){ 
       score=All_users[j].Score(); 
       ADVISOR_SCORE[j]=score; 
       } 
      return ADVISOR_SCORE; 
     } 
     public void print(){ 
      for(int i = 0;i<ADVISOR_SCORE.length;i++){ 
      System.out.println(ADVISOR_SCORE[i]); 
      } 
     } 
     public static void main(String[] args){ 
      double p1_1[] = {101,1,5,5,5}; 
      double p2_1[] = {101,1,1,2,3}; 
      Rating d = new Rating(p1_1); 
      Rating e = new Rating(p2_1); 
      All_user all=new All_user(d, e); 
      all.Score1(); 
      all.print(); 
     } 

    } 

Encore une fois, Je ne peux pas vous remercier assez à StackOverflow. Votre aide a été inestimable !!

+0

Je voudrais aussi vous donner quelques conseils - Utilisez la liste au lieu de tableaux; Suivez les conventions de nommage Java; embrasser le pour chaque construction de boucle. – Robert

+0

Suite au commentaire de Robert, voici un lien vers les conventions Java standard, qui aideront votre code Java à ressembler davantage à Java. :) http://www.oracle.com/technetwork/java/codeconv-138413.html – romacafe

Répondre

10

Vous n'avez pas initialisé les tableaux ADVISOR_SCORE et All_users, mais vous essayez d'attribuer des valeurs et de les utiliser. Lorsque vous déclarez

double[] ADVISOR_SCORE; // this is null until assigned 

À un certain moment, il doit être attribué

ADVISOR_SCORE = new double[size]; 
1

cette variable:

double [] ADVISOR_SCORE; 

n'a pas été initialisé ... et donc il est null.

1

ADVISOR_SCORE n'a pas été initialisées

1

Jeff Storey a fourni la meilleure explication, voici deux conseils liés à demi-I a dû apprendre en apprenant Java:

1) Une fois que vous initialisez ce tableau

ADVISOR_SCORE = new double[size]; 

Vous ne pouvez pas modifier la longueur du tableau à moins de le réinitialiser. Les élèves essaieront souvent d'ajouter une autre valeur à la fin d'un tableau ou de «faire croître» d'une façon ou d'une autre. Si c'est quelque chose dont vous avez besoin, passez à la caisse Vector et ArrayList.

2) conventions de codage Java sont de capitaliser les noms de classe ...

public class Rating { 

... mais laissez la première lettre des noms de méthode en minuscules.

public double [] getFirstScore() { 

Cela aidera la lisibilité lorsque d'autres commenceront à travailler sur votre code.

Bonne codification!

Questions connexes