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
相关产品推荐
相关产品推荐

