这是我发表的第一篇文章的后续文章,假设我有两个课程:
public class Carinfo {
private String carname;
//The Carinfo[] value is set when making a new car
//so for the object ford the array holds 3 null pointers
private Carinfo [] value;
Carinfo (String someCar, int carValue) {
this.carname = someCar;
this.value = new Carinfo[carValue];
}
}
第二节课:
public class CarPark {
HashMap<String, Carinfo> carGarage;
CarPark() {
carGarage = new HashMap<String, CarInfo>();
Carinfo ford = new Carinfo("Ford", 3);
Carinfo audi = new Carinfo("Audi", 2);
carGarage.put("Ford", ford);
carGarage.put("Audi", audi);
}
}
因此,无论出于什么原因,我想要拥有3个空指针的对象福特 在其Carinfo数组中,指向对象audi。 意思是我可以浏览Carinfo对象并列出每辆车的指针 有其他车。
把它想象成一个家庭,我想看看哪些车相互关联。 我很难创建一个指向其他对象的方法 在我的Carinfo HashMap中。
任何“指针”?如果有任何不清楚的地方,请让我改写或尝试更好地解释它。
干杯
答案 0 :(得分:1)
我真的不明白你要做什么。实现这一目的的一种方法是提供添加关系的特定方法。例如,使用您的阵列,您可以这样做:
public class CarInfo {
private Carinfo[] value;
public void addCarInfo(CarInfo carInfo, int position) {
value[position] = carInfo;
}
}
无论如何,拥有一个数组并不是一个好主意,你应该使用List。
答案 1 :(得分:1)
我建议不存储Carinfo
对象本身内的汽车之间的关系。相反,您应该使用通用图形库(或编写您自己的通用图形库)。
您可能知道,graph是一组节点和边,每条边代表两个节点之间的关系。您当前代码描述的概念实际上只是一个有向图:每辆车都是一个节点,每辆车都可以容纳一定数量的其他车辆参考,其中每个车辆代表从该车指出的边缘。
图形是数学和计算机科学中常见的抽象概念,已经实现了大量的库来表示图形,并且有利于为使用库的任何代码解决几个常见问题(例如,找到多步关系)两辆车之间使用最少数量的边缘,或找到图表中所需的最小边数以确保所有车辆仍然间接连接)。我建议搜索已经实现的图形库,然后使用具有最佳功能的图形库来解决整体问题。但是,如果这是一项家庭作业,您应该实现自己的图形库。这不是太难:你需要以某种方式存储节点和边缘(你可以保留一个节点列表,你可以使用边缘列表或邻接矩阵来存储边缘),你需要提供你关心的算法以更为一般的形式。这可能看起来更有效,但使代码更加模块化的好处将很快得到回报。您首先会创建更少的错误,因为您的代码的每个部分只执行一个作业,并且您将能够更轻松快速地修复错误,这可能会节省您的整体时间。
答案 2 :(得分:0)
对于初学者,您需要访问CarInfo
对象上的方法才能使用您设置的值数组。
public CarInfo[] getCarValue() {
return value;
}
现在,当你正在玩一个方法时,你可以按如下方式调用它:
CarInfo[] fordValueArray = carGarage.get("Ford").getCarValue();
此数组现在指向您在CarPark()
的第3个命令上创建的数组。
我们可以这样做:
fordValueArray[0] = audi;
现在,所有人都说,似乎有点不清楚为什么你要建立这样的阶级关系。 value
的命名看似不直观,因为面值你所问的是我们如何让汽车的价值与其他一些汽车无关。福特的第一个价值是奥迪?另外两个值是什么?为什么我们会被限制在3?