[英]Array method returning all null elements instead of object elements
我有以下方法的问题。 应该创建一个数组,用对象填充它,然后返回填充的数组。 但是,由于我不知道的原因,返回的数组充满了空值。
public Rodent[] getRodents(int amount) {
Random rng = new Random();
Rodent[] rodentArray = new Rodent[amount];
for (Rodent r : rodentArray) {
switch (rng.nextInt(3)) {
case 0:
r = new Mouse(); // Subclass of Rodent
break;
case 1:
r = new Gebril(); // Subclass of Rodent
break;
case 2:
r = new Hamster(); // Subclass of Rodent
break;
default:
r = new Rodent(); // For safety
}
System.out.println(r.getName()); // Test command inside the loop. Prints the name of all object correctly.
}
for (Rodent r : rodentArray) { // Test loop outside of previous loop.
System.out.println(r.getName()); // Throws null pointer exception.
}
return rodentArray; // Returns null filled array
}
编辑:
找到了我的答案。 谢谢。 现在,我不再需要像指针一样考虑增强的for循环。
r
是循环中的局部变量,在给定迭代之外不存在。 您的代码与下面的代码等效,在下面的代码中,更容易看到在每次迭代结束时r
被丢弃:
for (int i = 0; i < rodentArray.length; i++) {
Rodent r = rodentArray[i];
//your switch here
}
因此,在您的情况下,您可能应该使用标准的for循环,并用rodentArray[i] = new Mouse();
填充数组rodentArray[i] = new Mouse();
或与其他动物(视情况而定)。
您永远不会将新创建的啮齿动物对象放入数组中。 这是正确的代码-
public Rodent[] getRodents(int amount) {
Random rng = new Random();
Rodent[] rodentArray = new Rodent[amount];
for(int count = 0; count < rodentArray.length; count++) {
Rodent r;
switch (rng.nextInt(3)) {
case 0:
r = new Mouse(); // Subclass of Rodent
break;
case 1:
r = new Gebril(); // Subclass of Rodent
break;
case 2:
r = new Hamster(); // Subclass of Rodent
break;
default:
r = new Rodent(); // For safety
}
rodentArray[count] = r;
System.out.println(r.getName()); // Test command inside the loop. Prints the name of all object correctly.
}
for (Rodent r : rodentArray) { // Test loop outside of previous loop.
System.out.println(r.getName()); // Throws null pointer exception.
}
return rodentArray; // Returns null filled array
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.