java - 在狗和主人之间建立双向关系(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");
}
}
我可以对我的代码进行哪些更改,以便将狗添加到所有者或反之亦然自动设置另一个?
解决方案
首先,我建议使用 List 而不是数组。添加和删除项目要简单得多。
目前设置所有权的代码是:
dog.setOwner(o);
owner.dogList[0] = dog;
你认为你可以做哪些改变,这样你在调用它之后就Dog.setOwner()
不需要做?owner.dogList[0] = dog;
也就是说,放入一些代码,setOwner
这样你就可以说dog.setOwner(o)
并建立关系的两个方向?
以另一种方式设置关系并不容易——您通过直接操作 Owner 对象内部的数据结构而不是调用方法将 Dog 提供给 Owner。这意味着您无处放置代码来创建关系的另一个方向。所以创建一个Owner.addDog
方法是个好主意。
最后,一旦你开始在两个地方设置双向关系,你就需要考虑避免无限递归。
推荐阅读
- python-3.x - 将此运动检测器代码与树莓派中的单个网络摄像头一起使用
- c - 你能帮我改进一下吗?
- java - 字符串翻译和java代码的问题
- javascript - 仅在特定宽高比内隐藏移动设备上的图像
- python - 如何将表 1 中的列与表 2 中的另一列进行比较?
- c - 从文件中读取密文时,Openssl EVP API 无法解密密文(AES 128 ecb)
- linker - 搬迁超出范围;R_AARCH64_ADR_PREL_PG_HI21;通过链接器脚本变量;
- python - 上下文菜单 - 在嵌套的 QMenus 中重命名
- neo4j - 这个密码中时间字段的格式是什么?
- excel - 颜色行以匹配特定的单元格颜色