2014-02-06 2 views
0

Grails 클래스의 AddGrade을 사용하는 학생 클래스에서 AddGrade 메서드를 호출하려고하면 NullPointerException이 표시됩니다. 이유가 확실하지 않은 세부 정보를 추가해야한다고 나와 있습니다.이클립스에서 null 포인팅 예외가 발생했습니다. 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

학생 클래스의 생성자에서 등급 인스턴스를 만들어야합니다.

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

그렇지 않으면 this.grades은 다른 값으로 설정되지 않으므로 null입니다.

+0

고맙습니다. – user3277606

1

등급 인스턴스화되지 않았다입니다. 선언문에서 그렇게 할 수 있습니다.

등급은 클래스 (참조 유형) 값 유형 (일명 프리미티브 : int, bool, long 등 ...)을 인스턴스화 할 필요가 없습니다. String은 참조 유형이지만 컴파일러는 값 유형을 선언하는 것과 비슷한 방식으로이를 선언 할 수 있습니다. 클래스를 작성하는 경우에는 클래스를 작성하기 위해 생성자 중 하나를 호출해야합니다.

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

해당 필드는 프리미티브입니다. 그들은 널 포인터 예외를 발생시키지 않습니다. –

관련 문제