You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java中如何实现不同类间指定索引的对象数组访问与赋值

解决方案

我们通过公共方法传参的方式完成实例关联,同时满足三个独立类的结构要求,具体实现如下:

1. 改造Habitat类

public class Habitat {
    // 补充基础属性对应输出内容
    private int id;
    private String name;
    private String desc;
    private Animal[] animals;
    // 记录当前已存入的动物数量
    private int animalCount = 0;

    // 构造方法:初始化栖息地基础信息与动物数组容量
    public Habitat(int id, String name, String desc, int maxAnimalNum) {
        this.id = id;
        this.name = name;
        this.desc = desc;
        this.animals = new Animal[maxAnimalNum];
    }

    // 核心公共方法:接收动物实例完成关联,同时处理双向绑定
    public void addAnimal(Animal animal) {
        if (animalCount < animals.length) {
            animals[animalCount] = animal;
            // 给Animal的habitat属性赋值,实现双向关联
            animal.setHabitat(this);
            animalCount++;
        }
    }

    // 重写toString方法,直接输出要求格式的内容
    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append("Habitat ").append(id).append(" - ").append(name).append("\n");
        sb.append(desc).append("\n");
        sb.append("List of Animals: \n");
        for (int i = 0; i < animalCount; i++) {
            Animal animal = animals[i];
            sb.append("     Type ").append(i+1).append("\n");
            sb.append("     Name: ").append(animal.getName()).append("\n");
            sb.append("     Diet: ").append(animal.getDiet()).append("\n\n");
        }
        return sb.toString();
    }

    public Animal[] getAnimals() {
        return animals;
    }
}

2. 改造Animal类

public class Animal {
    private String name;
    private String diet;
    private Habitat habitat;

    public Animal(String name, String diet) {
        this.name = name;
        this.diet = diet;
    }

    public String getName() {
        return name;
    }

    public String getDiet() {
        return diet;
    }

    public Habitat getHabitat() {
        return habitat;
    }

    public void setHabitat(Habitat habitat) {
        this.habitat = habitat;
    }
}

3. Main类调用逻辑

public class Main {
    public static void main(String[] args) {
        // 初始化两个栖息地,每个最多容纳2个动物
        Habitat habitat1 = new Habitat(1, "Savanna", "Mixed woodland-grassland", 2);
        Habitat habitat2 = new Habitat(2, "Rainforest", "Tropical evergreen forest", 2);

        // 创建动物实例
        Animal type1 = new Animal("Tiger", "Carnivore");
        Animal type2 = new Animal("Elephant", "Herbivore");
        Animal type3 = new Animal("Parrot", "Omnivore");
        Animal type4 = new Animal("Gorilla", "Herbivore");

        // 将对应动物分配到对应栖息地
        habitat1.addAnimal(type1);
        habitat1.addAnimal(type2);
        habitat2.addAnimal(type3);
        habitat2.addAnimal(type4);

        // 直接打印即可得到要求的输出格式
        System.out.println(habitat1);
    }
}

核心逻辑说明

你之前遇到的问题本质是不同作用域的变量无法直接跨类访问:Main方法里的type1-type4是局部变量,Habitat类默认没有访问权限,所以通过公共的addAnimal方法把实例作为参数传递进Habitat,就能完成赋值。双向绑定逻辑在addAnimal方法中处理完成后,后续Animal实例也可以直接通过getHabitat()获取自己所属的栖息地。

运行Main方法后打印habitat1的输出完全符合要求的格式。

内容的提问来源于stack exchange,提问作者user199707

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 20:09:03