增强型for循环 - 对象数组

11

好的,我有一个名为Dog()的类,它接受两个参数,一个字符串和一个整数。
该类有一个称为bark()的方法,根据传递给Dog()构造函数的整数打印一个字符串。

我还有一个名为Kennel()的类,它创建一个由5个Dog()组成的数组...看起来像这样:

public class Kennel
{
    Dog[] kennel = new Dog[5];
    public Kennel()
    {
        kennel[0] = new Dog("Harold",1);
        kennel[1] = new Dog("Arnold",2);
        kennel[2] = new Dog("Fido",3);
        kennel[3] = new Dog("Spot",4);
        kennel[4] = new Dog("Rover",5);
    }
}

首先,这个方法虽然可行但似乎不太对。我为什么要从 Dog[] ... new Dog[5] 开始呢?可能是一个愚蠢的问题...我还是新手。

无论如何...我的任务是使用“增强型”for循环来遍历数组并调用bark()函数。

所以用传统的for循环来实现会是这样:

for (i=0;i<kennel.length;i++)
{
    kennel[i].bark();
}

这很简单,对吧?但是我要如何使用 for(type item : array) 的语法来实现这个呢?


类接受两个参数?这是一个类还是一个方法? - chinna_82
这是 Dog 类的构造函数。请参阅Java 构造函数 - Tristian
谢谢,你的问题帮助我得到了答案! - MRUNAL MUNOT
3个回答

27

只需在 for each 中使用它即可。

for(Dog d : kennel) {
    d.bark();
}

哈哈。您真是个传奇。一个类可以是一种类型。谁知道呢?我猜这就解释了数组的创建。一个类型为Dog的数组。太棒了。谢谢。 - MHz

10

以下是使用增强的for循环来完成此操作的方法。

for(Dog dog : kennel) {
    dog.bark();
}

对于您的另一个问题,如果您要使用数组,您必须在开始添加元素之前声明其大小。然而,有一个例外,如果您在同一行中进行初始化和声明,则可以不声明大小。例如:

Dog[] dogs = {new Dog("Harold", 1), new Dog("Arnold", 2)};

谢谢兄弟们!运行得很好。虽然我的意思是为什么我要使用Dog[] arrayName而不是Foo[] arrayName。你知道吗? - MHz

0

关于你的第二个问题:“为什么我必须从Dog[] ... new Dog[5]开始?”

这是因为你必须遵循相同的逻辑: Dog dog=new Dog(); ----(1) 所以,Dog[] dogArray=new Dog[5]; ---(2)

如果你对第一个问题没有问题,那么为什么要抱怨第二个问题呢。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接