Enhanced For Loop - Array of Objects

2020-05-28 03:44发布

问题:

Ok so I have a class called Dog() which takes two parameters, a string and an integer.
This class has a method called bark(), which prints a string depending on the integer passed into the Dog() constructor.

I also have a class called Kennel() which creates an array of 5 Dog()s... looks like this:

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);
    }
}

For starters, this works, but seems wrong. Why do I have to start with Dog[] ... new Dog[5]? Maybe stupid question... I'm new to this.

Anyway... What I have been asked to do is use the "enhanced" for loop to iterate through the array calling bark().

So with a traditional for loop it would look like this:

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

Simple stuff, right? But how do I implement this using the for(type item : array) syntax?

回答1:

Just use it in the for each

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


回答2:

Here's how you do it using enhanced for loop.

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

For your other question, if you're going to be using arrays, you'll have to declare the size before you start adding elements to it. One exception, however is if you are doing both initialization and declaration in the same line. For example:

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


回答3:

About your second question:"Why do I have to start with Dog[] ... new Dog[5]?"

Its because of same logic you have to put Dog dog=new Dog(); ----(1) That's why Dog[] dogArray=new Dog[5]; ---(2)

If you don't have problem with the first one then why crib about the second one.