Как назначить несколько объектов другому классу / объекту? - PullRequest
1 голос
/ 25 ноября 2011

Я должен создать программу, в которой есть зоопарк с тремя типами животных (жирафы, тигры и пингвины). Я должен создать метод, который назначает животных в зоопарк (может быть несколько зоопарков, поэтому он должен бытьконкретный), а затем метод, который может напечатать всех животных в этом зоопарке.

Как добавить несколько животных в зоопарк?Я могу назначить несколько животных в зоопарк (где вы можете распечатать информацию о животном, и он показывает, какой зоопарк, но мне нужно напечатать информацию о зоопарке, и он показывает животных, используя:

public class Animal extends Zoo {
    private Zoo zoo;
    public void setZoo(Zoo zoo){
        this.zoo = zoo;
    }
)

, но затем яне могу распечатать всех животных в зоопарке, только самое последнее животное, назначенное для зоопарка.

Вот то, что я придумал, печатает самые последние:

public class Zoo {
    private Animal animal;
    public void addAnimal(Animal animal){
        this.animal = animal;
    }
}

Большое спасибо !!

Ответы [ 2 ]

3 голосов
/ 25 ноября 2011

Я постараюсь помочь, но сомневаюсь, что правильно вас понял.

Сначала вам понадобится абстрактный класс Animal;нет смысла наследовать от зоопарка (что общего у них есть?) и от вашего класса зоопарка держать этих 3 типов животных.

Все трое должны наследоваться от абстрактного животного, потому что, ну ... они животные, и все становится проще, когда пришло время обрабатывать массив из 3 таких конкретных животных.

class Zoo {
    private Animal[] animals;
    private String zooName;
    private int zooSize;

    public String getName() {
        return zooName;
    }

    public Zoo(String name, int capacity) {
        zooSize = 0;
        animals = new Animal[capacity];
        this.zooName = name;
    }
    public void addAnimal(Animal an) {
        animals[zooSize] = an;
        zooSize++;
    }

    public String toString() {
        String tempStr = "In " + zooName + ", we keep these " + zooSize + " animals:\n";
        for(int i=0; i < zooSize; ++i) {
            tempStr += animals[i].getName() + "\n";
        }
        return tempStr;
    }
}

abstract class Animal {
    private Zoo zoo;
    private String name = "";

    public Animal(String name) {
        this.name = "Animal " + name;
    }

    public String getName() {
        return name;
    }

    public void setZoo(Zoo zoo)
    {
        this.zoo = zoo;
        this.zoo.addAnimal(this);
    }

    public String belongsWhere() {
        return  name + " belongs to " +
                zoo.getName() + " zoo";
    }
}

Видите ли, теперь нас не волнует, какое животное хранит зоопарк, это просто животное и у него есть имя, и оно зависит от его конкретного (тигр, жираф, пингвин).

class Giraffe extends Animal {

    public Giraffe(String surname) {
        super("Giraffe " + surname);
    }
}

class Tiger extends Animal {

    public Tiger(String surname) {
        super("Tiger " + surname);
    }
}

class Penguin extends Animal {

    public Penguin(String surname) {
        super("Penguin " + surname);
    }
}

И чтобы проверить это ...

public class Main {

        public static void main(String[] args) {
            Zoo z1 = new Zoo("Zoo1");
            Zoo z2 = new Zoo("Zoo2");

            Animal pen1 = new Penguin("Luke");
            Animal gir1 = new Giraffe("Duke");
            Animal pen2 = new Penguin("Fluke");
            Animal tig1 = new Tiger("Brooke");

            pen1.setZoo(z1);
            pen2.setZoo(z2);
            gir1.setZoo(z2);
            tig1.setZoo(z2);

            System.out.println(pen1.belongsWhere());
            System.out.println(tig1.belongsWhere());

            System.out.println(z1); System.out.println(z2);
        }
}

Я просто надеюсь, что помог.

0 голосов
/ 25 ноября 2011

Zoo должен состоять из List<Animal> животных, а не только одного Animal.

...