2017-01-04 3 views
-1

Почему это не скомпилируется? Я пытаюсь сортировать список школьных курсов одним int: courseLevel, в порядке возрастания.Исправление моей ошибки сортировки

У меня есть класс под названием UCFCourse с несколькими объектами courses[]. Я задаю значения свойств для каждого объекта, в то время как увеличивающиеся x.Here мой код в мой основной:

courses[x] = new UCFCourse(courseCode, courseLevel, courseHours, replaceString, eitherCourse); 

Здесь я добавил мой courses[] .Если я распечатать ListOne я получаю массивный список, содержащий все мои курсы , Класс

List<UCFCourse> ListOne = new ArrayList<UCFCourse>(); 
     for (int i = 0; i < courses.length; i++) { 
      ListOne.add(courses[i]); 
     } 


//I added all my courses[] to a List 
List<UCFCourse> ListOne = new ArrayList<UCFCourse>(); 
Collections.sort(ListOne, new CourseComparator()); 

Компаратор:

import java.util.Comparator; 

public class CourseComparator implements Comparator<UCFCourse> { 
    public int compare(UCFCourse Course1, UCFCourse Course2) { 
     return Course1.getCourseLevel() - Course2.getCourseLevel(); 
    } 
} 

Когда я первоначально создал свой объект он выглядел следующим образом:

UCFCourse[] courses = new UCFCourse[75]; 

Не уверен, что если этот бит имеет значение, так как я добавил все их в Список массивов уже, но я хочу быть основательным.

Ошибка:

Exception in thread "main" java.lang.NullPointerException 
+0

Вы 'null'-s в' списке ListOne' valiable. Проверьте, где вы их добавляете. –

+1

Вы отправили ошибку времени выполнения, а не ошибку компиляции. – shmosel

+2

Используете ли вы 'int' или' Integer' как возвращаемое значение 'getCourseLevel()'? –

ответ

1
List<UCFCourse> ListOne = new ArrayList<UCFCourse>(); 
<add your items to list here> 
Collections.sort(ListOne, new CourseComparator()); 

Как этот код стоит, вы отправляете пустой список в компаратор. Если вы уверены, что у вас есть элементы в списке, убедитесь, что пройденные предметы Course1 и Course2 имеют значение. Вы можете быстро протестировать, сняв с них 'getCourseLevel()' и вернув значения обратно вызывающему методу.

+0

OP сказал, что 'ListOne' был заселен из массива. Предполагая, что массив заполнен нулями, попытка вызвать 'getCourseLevel()' приведет к тому же исключению. – shmosel

1

Вы просто создаете новый объект в своей переменной ListOne, и эта переменная по-прежнему пуста, поэтому вы получаете исключение NullPointerException.

И попробуйте использовать корпус верблюда, чтобы вы могли правильно определить свой код.

+0

У меня есть цикл для добавления объектов. Я его отредактировал. – OneU

1

Из фрагмента коды вы предоставили, я могу сказать вам следующее:

UCFCourse[] courses = new UCFCourse[75]; 

только создает массив с полной нулевых объектов. Прорыв этого массива и добавление каждого объекта в ваш ArrayList не создадут их.

List<UCFCourse> ListOne = new ArrayList<UCFCourse>(); 
    for (int i = 0; i < courses.length; i++) { 
     ListOne.add(courses[i]); 
    } 

Следствием этого является то, что Comparator#compare(UCFCourse c1, UCFCourse c2) параметры метода, C1 и C2, будет нулевым, что приводит к NullPointerException.

Что вам нужно сделать, прежде чем добавлять их в ArrayList, чтобы создавать объекты UCFCourse, например .:

 for (int i = 0; i < courses.length; i++) { 
      courses[i] = new UCFCourse(...); 
     } 
+0

Я обновил свой пост. Спасибо! – OneU

+0

@Mrmug Вы все еще получаете ** тот же самый ** NPE? Я пробовал эту проблему в eclipse, и после инициализации объектов NPE уходит. – crazyExplorer

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