您好,我在进程中标记的地方得到了一个空指针。测试类在底部。尝试打印动物园时会发生这种情况。 好像是没有给“Animal animal”设置名字,但是我创造了动物。
它可能访问了我想要的错误动物,但是我如何访问我制作的列表中的动物(请不要在 for 参数中使用“:”)! 我知道这是错误的,但像 animal_list.printdetails 这样的东西?
public class Zoo {
private Animal animal;
public int number_animals;//# animals allowed in zoo
private List<Animal> animal_list;
private String zoo_name;
public Zoo(String name){
this.zoo_name = name;
animal_list = new ArrayList<Animal>();
}
public void addAnimal(Animal obj) {
animal_list.add(obj);
}
public String toString(){
String s = "In zoo " + zoo_name + " there are the following animals:\n";
for (int i = 0; i < animal_list.size(); i++){
s += animal.getName() + " who weighs " + animal.getWeight() + " kg.";//null pointer on this line why??? i have made an animal. How do I access this animals in the list (please no using the ":" in the for parameter)!
}
return s;
}
public class Animal {
public String name;
public int weight;
private String food_type;
private int space_requirement;
private Zoo zoo;
private Animal animal;
public Animal(String name, int weight){
this.name = name;
this.weight = weight;
}
public String getName(){
return this.name;
}
public int getWeight(){
return this.weight;
}
public class Test {
public static void main(String[] args) {
Zoo diego = new Zoo("San Diego");
Animal giffy = new Animal("Giffy", 950);
Animal gunther = new Animal("Gunther", 950);
diego.addAnimal(giffy);
diego.addAnimal(gunther);
System.out.println(diego);
}
最佳答案
for (int i = 0; i < animal_list.size(); i++){
s += animal.getName() + " who weighs " + animal.getWeight() + " kg.";
}
因为您没有使用 List
,所以您试图引用 Zoo
中的 animal
字段(您没有t 实际上在任何地方使用)。您必须从 animal_list
Animal
for (int i = 0; i < animal_list.size(); i++){
s += animal_list.get(i).getName() + " who weighs " +
animal_list.get(i).getWeight() + " kg.";
}
另请注意,您确实应该在此处使用 StringBuilder
而不是使用 +=
和 + 创建新的
运算符:String
对象
public String toString() {
StringBuilder s = new StringBuilder("In zoo ");
s.append(zoo_name).append(" there are the following animals:\n");
for (int i = 0; i < animal_list.size(); i++){
s.append(animal_list.get(i).getName());
s.append(" who weighs ");
s.append(animal_list.get(i).getWeight());
s.append(" kg.\n");
}
return s.toString();
}
String
在 Java 中是不可变的;你不能改变它们。当您使用 +=
或 +
连接它们时,您实际上是在创建新的 String
对象并丢弃旧对象。编译器实际上会将其优化到 StringBuilder
,但最好不要将其留给编译器。
编辑添加: 如果您不熟悉,以上是 method chaining 的示例
当你说这样的话时:
String name = animal_list.get(i).getName();
相当于:
Animal a = animal_list.get(i);
String name = a.getName();
关于java - 空指针错误帮助?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8274485/