我正在嘗試在java中爲最小生成樹實現Kruskal算法。我正在努力解決類型不兼容問題。在整個計劃中,我有幾個for循環看起來像這樣:Java中的類型兼容性問題
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.java內另一個類,和邊緣是這樣的類中的一個方法:
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循環產生一個錯誤類型的線, 「不兼容的類型:com.sun.javafx.geom.Edge不能轉換爲kruskal.Edge」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;
}
}
這個解決方案的唯一的問題是,當我實現它,它沒有認識到在我的邊緣實現我的是()和其他()方法。 java文件。這裏是我的其他()方法的示例:
public int other(int vertex) {
if (vertex == v) return w;
else if (vertex == w) return v;
else throw new IllegalArgumentException("Illegal endpoint");
}
我相信有一個簡單的解決方案,我無法想到這個問題。什麼是最好的方法來解決我的類型問題,同時仍然能夠從Edge類訪問我的方法?
好像你需要確保你的進口是正確的.. 。 –
某處你搞砸了導入,所以'edges'返回'com.sun.javafx.geom.Edge'而不是你自己的'Edge'類。看看你聲明'G'類的文件,看看它有什麼導入'邊緣' – resueman
你還應該認真考慮重命名你的類,變量和方法。一個或兩個字母的名稱不會說明類或變量代表什麼。即使你可能很難弄清楚你自己的代碼是幹什麼的,1到2周。另外,尊重Java命名約定。 –