1

这是我第一篇文章的后续,假设我有两个课程:

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);
    }
}

因此,假设无论出于何种原因,我希望在其 Carinfo 数组中有 3 个空指针的对象 ford 指向对象 audi。这意味着我可以通过 Carinfo 对象并列出每辆车对其他汽车的指针。

把它想象成一个家庭,我想看看什么车是相互关联的。我很难创建一个指向 Carinfo HashMap 中其他对象的方法。

任何“指针”?如果有任何不清楚的地方,请让我改写或尝试更好地解释它。

干杯

4

3 回答 3

1

我真的不明白你想做什么。实现这一点的一种方法是提供一种特定的方法来添加关系。例如,使用您的数组,您可以这样做:

public class CarInfo {
  private Carinfo[] value;
  public void addCarInfo(CarInfo carInfo, int position) {
    value[position] = carInfo;
  }
}

无论如何,拥有一个数组不是一个好主意,你应该使用一个列表。

于 2013-01-31T20:35:17.377 回答
1

我建议不要将汽车之间的关系存储在Carinfo对象本身内。相反,您应该使用通用图形库(或编写自己的通用图形库)。

您可能知道,是一组节点和边,每条边代表两个节点之间的关系。您当前代码描述的概念实际上只是一个有向图:每辆汽车都是一个节点,每辆汽车都可以保存一些对其他汽车的引用,其中每个引用代表从该汽车指向的一条边。

图形是数学和计算机科学中如此常见的抽象,因此已经实现了许多库来表示图形,附带的好处是,对于使用这些库的任何代码都可以解决几个流行的问题(例如,找到两辆汽车之间的多步关系使用最少的边数,或者在图中找到所需的最少边数,以确保所有汽车仍然是间接连接的)。我建议搜索已经实现的图形库,然后使用具有最佳功能的图形库来解决您的整体问题。但是,如果这是一项家庭作业,您可能应该实现自己的图形库。这并不难:您需要以某种方式存储节点和边(您可以只保留节点列表,并且您可以使用边缘列表或邻接矩阵来存储边缘),并且您需要以更通用的形式提供您关心的算法。这似乎需要做更多的工作,但是使代码更加模块化的好处将很快得到回报。首先,您将创建更少的错误,因为您的代码的每个部分只执行一项工作,并且您将能够更轻松、更快速地修复错误,这可能会节省您的整体时间。

于 2013-01-31T20:42:44.087 回答
0

对于初学者,您需要访问CarInfo对象上的方法才能使用您设置的值数组。

public CarInfo[] getCarValue() {
  return value;
}

现在,当您使用方法时,您可以按如下方式调用它:

CarInfo[] fordValueArray = carGarage.get("Ford").getCarValue();

该数组现在指向您在 .3 条命令中创建的数组CarPark()

有了它,我们可以做到:

fordValueArray[0] = audi;

现在,说了这么多,似乎有点不清楚为什么要建立这样的类关系。的命名value似乎不直观,因为从表面上看,您所问的是我们如何使汽车的价值与其他许多汽车独立相关。福特的第一价值是奥迪?另外两个值是什么?为什么我们会被限制在 3 个?

于 2013-01-31T20:32:02.213 回答