我正在尝试为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类访问我的方法的同时,修复类型问题的最佳方法是什么?
答案 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;
}
}
。