【问题标题】:How to assign multiple objects to another class/object?如何将多个对象分配给另一个类/对象?
【发布时间】:2012-01-06 14:06:34
【问题描述】:

我必须制作一个包含三种动物(长颈鹿、老虎和企鹅)的动物园的程序 我必须创建一个将动物分配给动物园的方法(可以有多个动物园,所以它必须是具体的),然后是一个可以打印该动物园中所有动物的方法。

如何将多个动物添加到动物园? 我可以将多个动物分配给一个动物园(您可以在其中打印动物的详细信息并显示哪个动物园,但我需要打印动物园的详细信息并显示动物使用:

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

非常感谢!!

【问题讨论】:

  • 首先,最好将作业标记为,嗯,作业。其次,用动物来扩展动物园是没有意义的,因为动物不是动物园。在您的第二个 sn-p 中,您只允许一只动物。您在这里使用了array 标记,所以大概这就是您正在寻找的提示。您的Zoo 需要一个Animal 数组,然后addAnimal 方法需要将动物添加到该数组中。
  • 我将如何做到这一点,以便当我添加新动物时,它不会保存到相同的数组索引号?我试着做一个静态 int number_of_animals;然后在 Animal 构造函数中有这个“number_of_animals+=1”。但是当我使用对在 Zoo 类中创建的数组中的数字的引用时,我得到一个空指针

标签: java arrays class methods


【解决方案1】:

Zoo 需要由动物的List<Animal> 组成,而不仅仅是一个Animal

【讨论】:

    【解决方案2】:

    我会尽力提供帮助,但我怀疑我是否理解正确。

    首先,您需要一个抽象类 Animal;从 Zoo 继承(它们有什么共同点?)和你的 Zoo 类来保存这 3 种动物是没有意义的。

    它们三个都应该从抽象的 Animal 继承,因为,嗯......它们是动物,当需要处理 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);
            }
    }
    

    我只是希望我能帮上忙。

    【讨论】:

    • 是的,这真的很棒,我只是想找到一种在没有 List 函数的情况下使用你的方法的方法,因为我还没有了解它们并且应该坚持使用数组。相当困难..
    猜你喜欢
    • 2016-06-24
    • 2011-12-24
    • 2017-01-25
    • 1970-01-01
    • 2019-12-27
    • 1970-01-01
    • 2021-05-02
    • 1970-01-01
    • 2022-09-18
    相关资源
    最近更新 更多