2015-04-12 59 views
0

我們有class City { int num; Double x; Double y; }; Road { Int num; City City1; City City1; Double distance}; Arraylist<Road> Rsystem=new Arraylist<Road>(); Rsystem(add(new Road(1; City1; City2);繪製道路的地圖城市之間有秩算法

`Rsystem(add(new Road(n; Citym; Cityk);` 

但我需要它以升序排序路的ArrayList中,從最短所以開始;

所以我想問問,我可以申請道路等構造函數

`Road { 
Int num; 
City City1; 
City City1; 
Double}  Road (int num, City City1, City City2) { this.num=num; 
this.City1=City1;this.City2=City2;this.distance= 
sqw((Pow(City1.x- City2.x),2)+ ((Pow(City1.y-City2.y), 2);)` 

還是應該使用一些方法 - double getdistance(Road RoadN) { double d; d=((Pow(RoadN.City1.x-RoadN.City2.x), 2)+ ((Pow(RoadN.City1.y- RoadN.City2.y), 2);
Return d;}

於是我使用的界面相當(只是一個比較 - ),並希望 排序這樣的ArrayList,其中包括 1. City1.City2. 2. City2.City3. 3. City1.City3 ... 我應該包括強制性現場距離 1. City1.City2.500 2. City2.City3.300 3. City1.City3.550 ... 通過它來進行排序,或者我可以只使用getDistance(Cityn)以進行排序比較(Cityn.getDistance())?你會建議什麼? 另一個問題是我可以只是 當它被排序時,它可以被視爲 34.City32.City34 22.city25.city27 27.city28.city29

我可以排序只是他們應該viwed爲 1.City32.City34 2.city25.city27 3.city28.city29

回答

0

構造道路設定的距離,以可變距離的ArrayList對象的索引(編號字段。

Arraylist<Road> Rsystem=new Arraylist<Road>(); 
Rsystem(add(new Road(1; City1; City2); 

這是正確的。

所以,如果你需要排序收集道路(Rsystem),你需要根據排序雙距離

類道路:

class Road { 
    Int num; 
    City City1; 
    City City1; 
    private Double distance; 
    public Double getDistance(){ 
     return distance; 
    }; 
}; 

您需要自定義比較排序根據屬性:

public class RoadComparator implements Comparator<Road> { 

    @Override 
    public int compare(Road o1, Road o2) { 

     return o1.getDistance() - o2.getDistance(); 
    } 

} 

然後排序依據進行:

Collections.sort(Rsystem, new RoadComparator()); 

通過這種方式,您可以排序與任何標準。

相關問題