【问题标题】:array list error in dijkstra algoritim javadijkstra算法java中的数组列表错误
【发布时间】:2014-10-06 22:03:44
【问题描述】:

我想对从数据库中获取的数据使用 dijkstra 算法 这是我过去的代码:

 List ed = new ArrayList();
    while(rscost.next())
                    {

                        int cost = Integer.parseInt(rscost.getString(3));
                        Vertex v2=  hst.get(rscost.getString(1));// get Vertex from hastable
                    ed.add(new Edge(v2,cost));                  
                    }
v1.adjacencies= new Edge[]{ed};

v1 是另一个顶点,我的主要对象是创建对象:

v1.adjacencies = new Edge[]{ new Edge(v0, 5),
                                 new Edge(v2, 3),
                                 new Edge(v4, 7) };

就像在示例中一样。

它抛出Type mismatch: cannot convert from List to Edge.

如果我将 ed 投射到边缘,它会抛出 null 值。

我应该如何添加这些元素?

【问题讨论】:

    标签: java arraylist dijkstra


    【解决方案1】:

    鉴于adjacencies 是一个边数组,那么您只能使用Edge 类型的对象填充adjacencies

    v1.adjacencies= new Edge[]{ed};
    

    这一行试图用 List 对象而不是 Edge 对象填充 adjacencies。由于变量 ed 无法从列表转换为边缘,因此您会收到类型不匹配错误。

    相反,您需要获取列表并将其转换为边缘数组。或者您可以将邻接设置为 List 对象而不是数组。

    【讨论】:

      【解决方案2】:

      从列表转换为数组的方式是错误的。首先你应该使用泛型,即

      List<Edge> ed = new ArrayList<Edge>();
      

      其次,您需要对数组进行不同的转换:

      v1.adjacencies = ed.toArray(new Edge[ed.size()])
      

      如果您使用的是旧版本的 Java,您可以遍历 List 并将其复制到数组中。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2010-10-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-10-26
        相关资源
        最近更新 更多