我想知道如何访问数组中类中的属性,如下例所示:
import java.util.*;
public class DogTest{
public class Dog {
int Quantity;
}
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
Dog dogs[] = new Dog[15];
for ( int i = 1; i <=15; i++){
System.out.println("Enter number of Dogs ");
dogs[i].Quantity = scan.nextInt();
}
}
}
上面的代码似乎不起作用。顺便提一句,dogs[i].Quantity
源自我的C ++知识。
错误消息:
Exception in thread "main" java.lang.NullPointerException
我的结构错了吗?或者还有另一种方法可以做到吗?
答案 0 :(得分:0)
数组从位置0开始。因此,在循环结束时,您尝试访问不存在的狗[15]。基本上,大小为15的数组由数字0-14访问。这可能是问题所在。 尝试像这样开始循环
for(int i=0;i<15;i++)
{
}
答案 1 :(得分:0)
首先为自己声明一个类,而不是像你那样为内部类声明。不要给字段第一个大写字母,即命名约定。
public class Dog{
int quantity;
}
并且,你的实际问题是,当你声明一个狗数组时,你声明了一个大小的数组,在你的情况下,15,但它不包含任何对象。你刚刚初始化和数组,它包含15个空值,可以用Dog对象填充。因为你得到一个空指针异常。所以,首先你应该用狗对象填充你的数组,如下所示:
for (int i = 0; i < dogs.length; i++){
dogs[i] = new Dog(); // calls a constructor for Dog object
}
然后,您可以通过循环访问对象以更改字段数量
for(int i = 0; i < dogs.length; i++){
dogs[i].quantity = i;
}
此外,我建议您将字段设为私有字段,并使用getter和setter方法来访问和更改其值。
编辑:是的,mikekane对于数组大小是正确的,你在使用你试图解决它的代码解决这个问题之后就会得到一个ArrayIndexOutOfBoundsException ...