2014-02-06 39 views
0

當我嘗試在學生類中調用AddGrade方法時,該方法使用的是年級中的AddGrade,我得到一個NullPointerException。 它說我必須添加更多的細節,我不知道爲什麼。在eclipse中得到一個空指向異常java

一級是

public class Grades { 
private double qualPts; 
private int numCreds; 

public Grades() { 

} 
/** 
* Returns the GPA 
*/ 
public double getGPA() 
{ 
    if (numCreds>0) 
    return qualPts/numCreds; 
    return 0; 
} 

/** 
* Adds the new grade's credits 
* Weights the newly added grade 
*/ 
public void addGrade(int creds, double grade) 
{ 
numCreds+=creds; 
qualPts+=creds*grade; 
} 
/** 
* Returns the number of credits 
*/ 
public int getNumCred() 
{ 
    return numCreds; 
} 

} 

類2是

Public class Student 
{ 
private String name; 
private String bNumber; 
private Grades grades; 

public Student(String name, String bNumber) { 
this.name=name; 
this.bNumber=bNumber; 
} 
/** 
* adds the new grade's credits 
* weights the new grade 
*/ 
public void addGrade(int creds, double grade) 
{ 
    grades.addGrade(creds,grade); 

} 

}

+1

看看'Student.grades'。仔細看看它,很難。你昨天也問過這個。 –

+0

另外,請查看使用調試器並遍歷代碼以瞭解其工作原理。 –

+0

除此之外,在詢問關於你得到的異常時,你應該總是追加完整的堆棧跟蹤。 –

回答

1

在您的Student類的構造函數中,您需要創建Grades實例。

public Student(String name, String bNumber) { 
this.name=name; 
this.bNumber=bNumber; 
this.grades = new Grades(); 
} 

否則this.grades是空的,因爲它永遠不會設置爲其他值。

+0

非常感謝你 – user3277606

1

等級從未實例化。你可以在聲明上做到這一點。

等級是一個類(引用類型)值類型(又名原語:int,布爾,長等等)不需要實例化。字符串是一種引用類型,但是編譯器允許您以與聲明值類型相似的方式來聲明它們。如果你寫了一個類,如果你想使用它,你必須調用它的一個構造函數。

public class Student 
{ 
    private String name; 
    private String bNumber; 
    private Grades grades = new Grades(); 

    public Student(String name, String bNumber) { 
    this.name=name; 
    this.bNumber=bNumber; 
    } 
    /** 
    * adds the new grade's credits 
    * weights the new grade 
    */ 
    public void addGrade(int creds, double grade) 
    { 
    grades.addGrade(creds,grade); 

    } 
} 
-2

一個問題可能是您沒有在Grade類中初始化兩個變量,但使用了numCreds + = creds和qualPts + = creds * grade;

public void addGrade(int creds, double grade) 
{ 
    numCreds+=creds; 
    qualPts+=creds*grade; 
} 
+2

那些領域是原始的。它們不會導致空指針異常。 –