首页 > 解决方案 > 在狗和主人之间建立双向关系(Java)

问题描述

我对编程很陌生,我正在为一个狗拍卖项目做一个任务,我想写一个方法把狗送给一个人。

我有一个所有者类,我想将狗对象存储在一个数组中(我知道使用列表是一个选项,但赋值指定了数组的使用)。我有一个狗类,我希望能够设置一个所有者。我遇到的问题是,每当我将狗添加到拥有狗的所有者数组时,我想自动设置狗的所有者变量,反之亦然,如果我调用 setOwner 中的方法,我想自动将狗添加到数组中狗类

这是我的狗类:

public class Dog{
    private String name;
    private String breed;
    private int age;
    private int weight;
    private double tailLength;
    private Owner owner;

    public Dog(String name, String breed, int age, int weight) {
            this.name = name;
            this.breed = breed;
            this.age = age;
            this.weight = weight;
            
    }
   
    public String getName() {
        return name;
    }
    
    public String getBreed() {
        return breed;
    }
    
    public void increaseAge() {
        age++;
    }

    public int getAge() {
        return age;
    }

    public int getWeight() {
        return weight;
    }

    public double getTailLength() {
        if (breed.equalsIgnoreCase("dachshund") || breed.equalsIgnoreCase("tax")) {
            return 3.7;
        } else {
            return weight * (age / 10.0);
        }
    }
    
   public Owner setOwner(Owner owner){
    return this.owner = owner;
   }
   
    public Owner getOwner(){
        return owner;
    }
    
    public String toString() {
        return "Name: " + name + " Breed: " + breed + " Age: " + age + " Weight: " + weight + " Tail length: " + getTailLength();
    }

}

这是所有者类:

public class Owner {
        
        private String ownerName;
        public Dog[] dogList = new Dog[1];
        
        public Owner(String ownerName) {
            this.ownerName = ownerName;
        }
        
        public String toString(){
            return "Name: " + ownerName;
        }
        
        public String getName(){
            return ownerName;
        }            
    
    }

最后,这是目前为止的 giveDog 方法:

public void giveDog(){
        System.out.print("Enter the name of the dog?>");
        String name = input.nextLine();
        Dog dog = findDog(name);
    
    if (dog == null){
        System.out.print("Error: No dog with that name");
    return; 
    }
   
    if (dog.getOwner() !=null){                    
        System.out.print("Error: Dog already has owner");
    return; 
    }

         System.out.print("Enter the name of the new owner?>");
         String nameOfOwner = input.nextLine().toUpperCase();
         Owner o = findOwner(nameOfOwner);

         if (o!= null) {
            
            dog.setOwner(o);
            owner.dogList[0] = dog;
        

         


             System.out.println(owner.getName()+" now owns "+ dog.getName()); 


         

         } else {
             System.out.print("Error: No such owner");

        } 
     }

我可以对我的代码进行哪些更改,以便将狗添加到所有者或反之亦然自动设置另一个?

标签: javaarrays

解决方案


首先,我建议使用 List 而不是数组。添加和删​​除项目要简单得多。

目前设置所有权的代码是:

  dog.setOwner(o);
  owner.dogList[0] = dog;

你认为你可以做哪些改变,这样你在调用它之后就Dog.setOwner()不需要做?owner.dogList[0] = dog;也就是说,放入一些代码,setOwner这样你就可以说dog.setOwner(o)并建立关系的两个方向?

以另一种方式设置关系并不容易——您通过直接操作 Owner 对象内部的数据结构而不是调用方法将 Dog 提供给 Owner。这意味着您无处放置代码来创建关系的另一个方向。所以创建一个Owner.addDog方法是个好主意。

最后,一旦你开始在两个地方设置双向关系,你就需要考虑避免无限递归。


推荐阅读