Я практикую с ArrayList
и столкнулся с чем-то, чего я не понимаю.У меня есть класс Knapsack
и класс Item
, я заполняю knapsacks
с items
и выполняю различные тесты на knapsacks
и т. Д.
Один из публики Knapsack
методы возвращает общий вес элементов non-null
в knapsack
.Другой метод Knapsack
, который является методом статического класса, возвращает самый тяжелый knapsack
в массиве Knapsack
объектов.
Когда я вызываю этот код, чтобы проверить, равны ли элементы в knapsack
1000g:
testIntEqual("heaviestKnapsack", 1000, Knapsack.heaviestKnapsack(sacks).totalWeightInGrammes());
IntelliJ выдает мне NullPointerException
предупреждение для вызова totalWeightInGrammes()
Вот реализации методов heaviestKnapsack()
и totalWeightInGrammes()
:
public static Knapsack heaviestKnapsack(Knapsack[] knapsacks) {
// TO DO
if (knapsacks.length != 0) {
Knapsack heaviest;
int index = 0;
while (true) {
heaviest = knapsacks[index];
if (heaviest == null) {
index++;
} else {
break;
}
}
for (Knapsack knapsack : knapsacks) {
if (knapsack != null && (getTotalKnapsackWeight(knapsack) > getTotalKnapsackWeight(heaviest))) {
heaviest = knapsack;
}
}
return heaviest;
}
return null;
}
public int totalWeightInGrammes() {
// TO DO
if (!knapsackItems.isEmpty()) {
int totalWeight = 0;
for (Item i : knapsackItems) {
if (i != null) {
totalWeight += i.getWeightInGrammes();
}
}
return totalWeight;
}
return 0;
}
Меня действительно смущает, почему IntelliJ предупреждает меня о NPE, когда я тщательно проверил null
в этих методах и totalWeightInGrammes()
возвращает тип примитива int
.
Большое спасибоза все комментарии:)