В моей программе у меня есть класс под названием Hive, который содержит Honey, Pollen, royalJelly и arraylist нескольких видов пчел. Некоторые из видов пчел имеют метод съедания, который в значительной степени идентичен между ними с разницей в том, что они едят, или количеством, которое они едят. У каждой пчелы есть метод AnotherDay, который вызывает метод eat на пчеле, а в другом методе DayDay он проходит через аррайалист, называя каждого пчелы anotherDay. Моя королева пчелы едят работает отлично, однако, когда я бегу есть на мой рабочий, гул или личинки, я получаю исключение NullPointerException, и я не могу понять, почему! Мой код:В чем причина моего NullPointerException?
Улей класс:
public class Hive {
ArrayList<Bee> cells = new ArrayList<Bee>();
int honey = 10;
int royalJelly = 10;
int pollen = 10; //some methods omitted
public void anotherDay(){
ArrayList<Bee> dead = new ArrayList<Bee>();
int size = cells.size();
for(int i = 0; i < size; i++) {
Bee bee = cells.get(i);
if ((bee = bee.anotherDay()) == null) {
dead.add(cells.get(i));
} else {
cells.set(i, bee);
}
}
cells.removeAll(dead);
}
Королева Класс: (не получить исключения нулевого указателя из метода едят в этом классе)
public class Queen extends Bee{
Hive hive = null;
public Queen(){
}
public Queen(Hive hive){
this.hive = hive;
this.type = 1;
this.age = 11;
this.health = 3;
}
public Bee anotherDay(){
eat();
if (health == 0) {
return null;
}
age++;
if (age % 3 == 2) {
hive.addBee(new Egg());
}
return this;
}
public boolean eat(){
if(hive.honey >= 2) {
hive.takeHoney(2);
if(health < 3){
health++;
}
return true;
}
health -= 1;
return false;
}
}
Работник класса пчелы: (получить NullPointerException- не знаю, почему)
public class Worker extends Bee {
Hive hive = null;
public Worker(){
this.type = 2;
this.age=11;
this.health=3;
}
public Bee anotherDay(){
eat();
age++;
if (health == 0) {
return null;
}
return this;
}
public boolean eat(){
if(hive.honey >= 1) {
hive.takeHoney(1);
if(health < 3){
health++;
}
return true;
}
health -= 1;
return false;
}
}
Исключение:
Exception in thread "main" java.lang.NullPointerException
at Larvae.eat(Larvae.java:26)
at Larvae.anotherDay(Larvae.java:13)
at Hive.anotherDay(Hive.java:86)
at TestBasicHive.testpart4(TestBasicHive.java:381)
at TestBasicHive.main(TestBasicHive.java:13)
Я добавляю элементы в arraylist, и код работает нормально до тех пор, пока не появятся личинки/рабочие или беспилотные летательные аппараты, и на них попытается использовать метод eat. Если я закомментируйте бит, который запускает метод съесть это будет работать нормально (но, очевидно, не делать то, что я хочу, чтобы это сделать)
Из ответов дал я попытался изменить конструктор в своем классе рабочий на:
public Worker(Hive hive){
this.hive=hive;
this.type = 2;
this.age=11;
this.health=3;
}
public Worker(){}
мне нужно «пустой» конструктор, как пчелы работника добавляется в улей из метода anotherDay в куколке, которая:
public Bee anotherDay(){
age++;
if(age>10){
return new Worker();
}return this;
}
Это затем добавляет к ArrayList с помощью метода anotherDay в улье.
Пожалуйста, добавьте исключение. – span
'Hive hive = null;' является виновником в классе «Worker» – Nishant
, исключение идентично для рабочего с личинками, замененным на Worker, и 26 заменено на 22 – user2973447