在Java

时间:2015-11-04 21:33:09

标签: java class types edges

我正在尝试为Java中的最小生成树实现Kruskal算法。我正在努力解决类型不兼容问题。在整个程序中,我有几个for循环,如下所示:

for (Edge f : G.edges()) {
            int x = f.either(), y = f.other(x);
            if (!uf.connected(x, y)) {
                if (f.weight() < e.weight()) {
                    System.err.println("Edge " + f + " violates cut optimality conditions");
                    return false;
                }
            }
        }

所有的for循环我看起来都与此类似<或者

Edge f : G.edges()

Edge e : G.edges()

在括号内。在这种情况下,Edge是项目Edge.java中的另一个类,而edge是此类中的方法:

for (Edge e : edges()) {

        // all edges in MST except e
        uf = new UF(G.V());
        for (Edge f : mst) {
            int x = f.either(), y = f.other(x);
            if (f != e) uf.union(x, y);
        }

当此代码放入NetBeans时,包含for循环的行会产生类型错误,&#34;不兼容的类型:com.sun.javafx.geom.Edge无法转换为kruskal.Edge&#34; NetBeans建议通过将f和e变量的类型更改为边来修复此问题。这样做会使我的代码看起来像这样:

for (com.sun.javafx.geom.Edge e : G.edges()) {
        int v = e.either(), w = e.other(v);
        if (!uf.connected(v, w)) {
            System.err.println("Not a spanning forest");
            return false;
        }
    }

此解决方案的唯一问题是,当我实现它时,它无法识别我的Edge.java文件中实现的()和其他()方法。以下是我的other()方法的示例:

public int other(int vertex) {
    if      (vertex == v) return w;
    else if (vertex == w) return v;
    else throw new IllegalArgumentException("Illegal endpoint");
}

我相信这个问题有一个简单的解决方案,我无法想到。在仍然能够从Edge类访问我的方法的同时,修复类型问题的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

删除所有出现的&#34; com.sun.javafx.geom.Edge&#34;

在import语句中只使用kruskal.Edge

答案 1 :(得分:0)

问题是您引用了错误的Edge类。

// Set Up my Database paramaters
var coachdb = new AWS.DynamoDB({
  ...
});

// This tracks the array index of the current parameter.
var pos = 0;

function callback(err, data) {
  if (err) { 
    console.log(err, err.stack);
  } else if (data.Items.length > 0) {

    //return data.Items  // Where I need something here to return data

  } else if (++pos < params.length) {      // Increment the index.
    coachdb.query(params[pos], callback);  // Recursive call.
  }
}

coachdb.query(params[pos], callback); // Kick off the series of calls

应该是这样的:

for (com.sun.javafx.geom.Edge e : G.edges()) {
    int v = e.either(), w = e.other(v);
    if (!uf.connected(v, w)) {
        System.err.println("Not a spanning forest");
        return false;
    }
}

或者只是正确导入课程。检查您当前的导入,确保您没有明确导入Sun for (com.your.project.model.Edge e : G.edges()) { int v = e.either(), w = e.other(v); if (!uf.connected(v, w)) { System.err.println("Not a spanning forest"); return false; } }