1
我正在嘗試爲鄰接矩陣實現Dijkstra的算法,並且我正在使用Java優先級隊列來執行此操作。 對於我的頂點我創建一個自定義的比較器類,但我收到以下錯誤:使用自定義比較器類的錯誤
<anonymous Dijkstra$1> is not abstract and does not override abstract method compare(vertex,vertex) in java.util.Comparator
PriorityQueue<vertex> Q = new PriorityQueue<vertex>(n,new Comparator<vertex>() {
這裏是代碼:
import java.util.Scanner;
import java.io.File;
import java.util.PriorityQueue;
import java.util.Comparator;
class vertex {
int v,d;
public vertex(int num,int dis){
v =num;
d=dis;
}
public int getv(){
return v;
}
public int getd(){
return d;
}
}
,然後我用它來創建一個新的優先級隊列:
PriorityQueue<vertex> Q = new PriorityQueue<vertex>(n,new Comparator<vertex>() {
public int compare (Object a, Object b){
vertex v1 = (vertex)a;
vertex v2 = (vertex)b;
if (v1.getd() > v2.getd()){
return +1;
}else if (v1.getd() < v2.getd()){
return -1;
}else {
return 0;
}
}});
如果你使用的'比較',然後比較方法簽名是:'公衆詮釋比較(頂點a,頂點b);而且,將比較方法編寫爲:'return a.getd() - b.getd();' –
'a.getd() - b.getd( )'會因爲溢出而返回非常大的值的錯誤結果。 –
@JB Nizet - ofcourse ...我並不總是小心翼翼,但一個好的做法是在處理大數字時除以2:'return a.getd()/ 2 - b.getd()/ 2; ''或者使用BigInteger這樣的類 –