【问题标题】:Creating pointers out of HashMap objects in an object array从对象数组中的 HashMap 对象创建指针
【发布时间】:2013-01-16 01:30:43
【问题描述】:

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

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 个空指针的对象 ford 在它的 Carinfo 数组中,指向对象 audi。 这意味着我可以浏览 Carinfo 对象并列出每辆车的指针 必须到其他车。

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

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

干杯

【问题讨论】:

  • 您真正想在这里完成什么?你在学习 Java 吗?

标签: java arrays object pointers hashmap


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

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

      现在,当你在玩一个方法时,你可以这样调用它:

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

      这个数组现在指向你在CarPark()的第三条命令中创建的那个。

      我们可以这样做:

      fordValueArray[0] = audi;
      

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

      【讨论】:

      • 嗨,很抱歉变量名选择不当。之所以这样设置,是因为它是我在 Uni 的任务之一。所以我真的必须接受我在课堂设置方面的任何规定。如果我将其设置为关系网络,它可能会更直观。因此,我很抱歉,晚餐后立即尝试您的解决方案。谢谢
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-05-26
      • 1970-01-01
      • 2018-02-25
      • 2021-09-02
      • 1970-01-01
      • 2014-11-26
      相关资源
      最近更新 更多