2013-11-15 2 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 = + grade [ i]; 'в getAverage либо – Floegipoky

+0

Ваш int min = оценки [0]; в getMinimum может установить min, чтобы сказать 50, если это действительный класс. Затем, когда вы просматриваете минимум в цикле, вы ссылаетесь на оценки [min], которые дадут вам оценки [50] - 51-й элемент оценок, что почти наверняка не то, что вы хотите. Просто положить оценки [i] <мин должен работать. – Bruce

ответ

2

В конструкторе вы объявляли локальных переменныеgrades, не инициализировать экземпляр переменной grades:

int [] grades = new int [numberofStudents]; 

Так экземпляр переменной grades остается null. Попробуйте следующее:

grades = new int [numberofStudents]; 

, который ссылается на переменную экземпляра вместо объявления локальной переменной.

+0

Большое спасибо. У меня есть еще один вопрос. Производит ли случайный генератор много 0s. Большинство моих значений - 0 с. – user2997109

+0

В настоящее время вы сортируете массив каждый раз, когда значение задается в массиве. Это означает, что значения по умолчанию (нули), которые все еще существуют, будут завершены в начале массива. Не сортируйте массив до тех пор, пока не будут установлены все классы. – rgettman

Смежные вопросы