#java #arrays #nullpointerexception
#java #массивы #исключение nullpointerexception
Вопрос:
Я пытаюсь найти минимум массива. Массив содержит узлы — узел содержит элемент E и значение приоритета int. Я хочу найти узел в массиве с наименьшим приоритетом.
@Override
public E min() {
Node temp = S[0];
for(int i = 1; i<S.length; i ){
int prio= S[i].getPrioritet(); <-- nullpointer excp.
if(prio<temp.getPrioritet()){
temp = S[i];
}
}
return temp.getElement();
Но я получаю исключение nullpointer, когда пытаюсь его использовать. Кто-нибудь знает, что я делаю не так?
Вот мой тест:
PrioritetArraySorteret<String> p = new PrioritetArraySorteret<String>();
p.insert(1, "Hello");
p.insert(3, "Hi");
p.insert(4, "Hawdy");
System.out.println(p.min());
}
Комментарии:
1. для(int i = 1; i<S.длина; i ) —> i начинается с 1? Сколько составляет S.length? В этом случае кажется, что S [i] равно нулю….
Ответ №1:
начните с i= 0, поскольку массив индексируется
for(int i = 0; i<S.length; i ){
int prio= S[i].getPrioritet(); <-- nullpointer excp.
if(prio<temp.getPrioritet()){
temp = S[i];
}
}
Комментарии:
1. Нет, потому что я сравниваю другие элементы в массиве с первым элементом в массиве -> Node temp = S[0];
2. На самом деле это не решает проблему, и индекс должен был начинаться с 1, чтобы начать сравнение со второго элемента, поскольку первый использовался в качестве основы для минимума.
3. верно, но это не повлияет на результат и является простым решением того, что делать, когда в массиве есть только один элемент
Ответ №2:
Это просто означает, что элемент в одном из индексов массива S
равен null. Возможно, вы инициализировали массив с размером, n
но заполнили меньше n
позиций.
Подобное изменение, вероятно, исправит это:
for(int i = 1; i<S.length; i ){
if(S[i] != null) {
int prio= S[i].getPrioritet(); <-- nullpointer excp.
if(prio<temp.getPrioritet()){
temp = S[i];
}
}
}
Тем не менее, вы, возможно, немного изобретаете колесо. Достаточно использовать простой ArrayList
параметр с некоторым типом, который вы определяете, который инкапсулирует значение и приоритет. Затем вы могли бы реализовать этот тип Comparable
с compareTo
помощью метода, который использует приоритет, или написать Comparator
для поиска минимального:
List<YourType<String>> list = new ArrayList<YourType<String>>();
Collections.min(list);
Или, если вы используете пользовательский компаратор:
Collections.min(list, yourComparator);
— отредактировано для min
вместо sort
. Извините.
Ответ №3:
Массив S не был инициализирован или один / более элементов были инициализированы.