2010-09-14 42 views
2

所以我想告訴你我自己正在學習Java,而你們是我最喜歡的教師。非常感謝你支持我這個簡單而明顯的問題。我只是想學習。我再次得到一個錯誤,對於我的生活我無法弄清楚。Java中面向對象編程的問題

以下是錯誤:

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) 

這裏是我的評級類代碼:

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

這裏是我的其他類代碼:

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

    } 

同樣,我無法在StackOverflow上感謝你們。你的幫助是無價的!

+0

我也想給你一些建議 - 使用List而不是數組;遵循java命名約定;擁抱每個循環結構。 – Robert 2010-09-14 16:49:57

+0

Robert的評論後續內容,這裏是一個標準Java約定的鏈接,它將幫助你的Java代碼看起來更像Java。 :) http://www.oracle.com/technetwork/java/codeconv-138413.html – romacafe 2010-09-14 17:04:15

回答

10

您還沒有初始化ADVISOR_SCORE和All_users數組,但您嘗試分配值並使用它們。當你聲明

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

在某些時候,它需要被分配

ADVISOR_SCORE = new double[size]; 
1

這個變量:

double [] ADVISOR_SCORE; 

尚未初始化...,因此它的null

1

ADVISOR_SCORE尚未初始化

1

傑夫·斯托裏提供了最好的解釋,這裏有兩個半相關的提示我學習Java時必須學習:

1)一旦初始化該陣列

ADVISOR_SCORE = new double[size]; 

除非重新初始化,否則不能修改數組的長度。學生通常會嘗試在數組的末尾添加另一個值,或者以某種方式「增長」它。如果這是您需要的,請檢查VectorArrayList

2)Java編碼約定是大寫的類名...

public class Rating { 

...但留下方法名的首字母小寫。

public double [] getFirstScore() { 

當別人開始處理您的代碼時,這將有助於可讀性。

快樂編碼!