如何在数组内的类中访问属性?

时间:2017-01-09 12:28:47

标签: java arrays class attributes

我想知道如何访问数组中类中的属性,如下例所示:

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

我的结构错了吗?或者还有另一种方法可以做到吗?

2 个答案:

答案 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 ...