2013-11-15 93 views
2

有我得到方法返回空指针错误

Exception in thread "main" java.lang.NullPointerException 
    at StudentGrades.getMinimum(StudentGrades.java:54) 
    at StudentClient.main(StudentClient.java:14) 

我没有找到我设置一个空的任何方法的错误。

我尝试使用中值方法,但仍然让我这个相同的错误。

import java.util.Arrays; 
import java.util.Random; 

public class StudentGrades { 

Random randomNumber = new Random(); 
int numberofStudents; 
int grade; 
int[] grades; 
int sum = 0; 

public StudentGrades(int studentNumber) { 
    numberofStudents = studentNumber; 
    int[] grades = new int[numberofStudents]; 
    for (int i = 0; i < numberofStudents; i++) { 
     grades[i] = randomNumber.nextInt(101); 
     Arrays.sort(grades); 

    } 

} 

public int getNumberStudents() { 
    return numberofStudents; 
} 

public int[] getStudentGrades() { 
    int[] temp = new int[grades.length]; 
    for (int i = 0; i < grades.length; i++) { 
     temp[i] = grades[i]; 
    } 
    return temp; 
} 

public void setStudentGrades(int n) { 
    grade = n; 
} 

public double getAverage() { 
    for (int i = 0; i < grades.length; i++) { 
     sum = +grades[i]; 
    } 
    double average = (double) sum/numberofStudents; 
    return average; 
} 

public int getMaximum() { 
    int max = grades[0]; 
    for (int i = 0; i < grades.length; i++) { 
     if (grades[i] > grades[max]) 
      max = grades[i]; 
    } 
    return max; 

} 

public int getMinimum() { 
    int min = grades[0]; 
    for (int i = 0; i < grades.length; i++) { 

     if (grades[i] < grades[min]) 
      min = grades[i]; 
    } 
    return min; 
} 

public String toString() { 
    String returnString = "grades :"; 
    for (int i = 0; i < grades.length; i++) { 
     returnString += grades[i]; 
    } 
    return returnString; 
} 

public double getMedian() { 
    double median = 0; 

    if (grades.length % 2 == 0) { 
     median = (grades[grades.length/2] + grades[(grades.length/2) + 1])/2; 

    } else 

     median = grades[((grades.length - 1)/2) + 1]; 

    return median; 
} 

} 
+0

你需要再次看看你的getMinimum方法,我不认为它在做你认为它在做什么 – Floegipoky

+0

另外,getMaximum也有同样的问题,我不认为你的意思是写'sum = + grades [我];'在getAverage – Floegipoky

+0

您的int min =成绩[0];在getMinimum可以设置分钟为50,如果这是一个有效的分数。然后,当你查看循环中的最小值时,可以参考等级[分],这会给你成绩[50] - 成绩的第51个元素 - 这几乎肯定不是你想要的。只是把分数[我] <分钟应该工作。 – Bruce

回答

2

在你的构造函数,你声明的本地变量grades其未初始化的实例变量grades

int [] grades = new int [numberofStudents]; 

所以实例变量grades仍然null。试试这个:

grades = new int [numberofStudents]; 

它引用实例变量而不是声明局部变量。

+0

非常感谢你。我还有一个问题。随机生成器是否会创建大量的0。我的大部分值都是0。 – user2997109

+0

目前,您每次在数组中设置一个值时都对数组进行排序。这意味着仍然存在的默认值(零)会在数组的开始处结束。在所有等级都设置好之前不要对数组进行排序。 – rgettman