2014-02-25 64 views
0

您好,我想根據最短距離在地圖上繪製多邊形。訂購陣列中的物品

我已經創建了名爲distancearray的數組列表。

但我想要創建一個名爲shortdistance的新數組列表,這個數組列表在distancearray中必須具有相同的值,但它必須根據距離的不同而有所不同。

任何一個可以幫助我創建這個短距離陣列的。謝謝。

String array[][]=dbhand.collecting(getIntent().getExtras().getString("temple_type"), Integer.parseInt(getIntent().getExtras().getString("notemples"))); 

for(int i=0;i<array.length;i++){     
    displaymarkers(Double.parseDouble(array[i][0]), Double.parseDouble(array[i][1]), array[i][2]); 
} 

for(int i=0;i<array.length;i++){ 
    double Distance = calculate_distance(SEATTLE_LAT, SEATTLE_LNG, Double.parseDouble(array[i][0]), Double.parseDouble(array[i][1])); 

    double[][] distancearray = new double[array.length][3]; 

    distancearray[i][0]=Double.parseDouble(array[i][0]); 
    distancearray[i][1]=Double.parseDouble(array[i][1]); 
    distancearray[i][2]=Distance; 

} 

double [][] shortdistance = new double [array.length][3]; 

繪製多邊形功能

private void drawpolygon(String array[][]) { 

    int lengh = array.length; 
    if(lengh==2){ 
     mMap.addPolygon(new PolygonOptions() 
     //.add(new LatLng(9.662502, 80.010239), new LatLng(9.670931, 80.013201), new LatLng(9.663216, 80.01333)) 
     .add(new LatLng(9.6632139, 80.0133258)) 
     .add(new LatLng(Double.parseDouble(array[0][0]), Double.parseDouble(array[0][1]))) 
     .add(new LatLng(Double.parseDouble(array[1][0]), Double.parseDouble(array[1][1]))) 
     .fillColor(Color.GRAY)); 
    } 

回答

1

你將有困難排序的數組作爲,是因爲你目前在存儲陣列並行數據:

 distancearray[i][0]=Double.parseDouble(array[i][0]); 
     distancearray[i][1]=Double.parseDouble(array[i][2]); 
     distancearray[i][3]=Distance; 

您可以按distancearray[n]但是,這將使你胡說結果。相反,你應該做的是創建一個實現Comparable(基於距離比較),它保存你的三個值,然後用這些類的數組工作小類:

class DistanceInfo implements Comparable<DistanceInfo> { 
    public double a; 
    public double b; 
    public double distance; 
    public DistanceInfo (double a, double b, double distance) { 
     this.a = a; 
     this.b = b; 
     this.distance = distance; 
    } 
    @Override public int compareTo (DistanceInfo d) { 
     return Double.compare(distance, d.distance); 
    } 
} 

// then: 
DistanceInfo[] distancearray = new DistanceInfo[array.length]; 

// and you can load it using the constructor: 
for (int i = 0; i < array.length) { 
    double a = Double.parseDouble(array[i][0]); 
    double b = Double.parseDouble(array[i][1]); 
    distancearray[i] = new DistanceInfo(a, b, Distance); 
} 

(字段可以,如果你進行final希望規定他們不能施工後進行修改)現在

Arrays.sort()會根據距離進行排序distancearray

Arrays.sort(distancearray, null); 

你也可以使用一個ArrayList<DistanceInfo>相反,除非你用Collections.sort()排序,否則這個想法是一樣的。

一般來說,由於這個原因(除其他外),通常最好使用類來存儲關於對象的所有信息,而不是平行數組。


順便說一句,你可能要考慮使用這個類 array爲好,它可以簡化您的代碼位(可以修改 displaymarkers採取 DistanceInfo,你也可避免解析相同的一倍以上比一次)。

+0

謝謝賈森。我編輯了這個問題。我想將數組傳遞給'drawpolygon(distancearray);'函數。我已經爲問題添加了多邊形函數,可以請告訴我如何將distancearray傳遞給多邊形函數。 –

+0

@ user3234352將參數傳遞給函數是非常基礎的Java。您需要閱讀關於[將信息傳遞給方法]的官方教程(http://docs.oracle.com/javase/tutorial/java/javaOO/arguments.html)。 –

4

只需撥打Arrays.sort()對你的陣列,並指定一個比較,着眼於距離。

+0

'Arrays.sort()'不會爲此工作,因爲他使用的是並行數組(並且引導順序錯誤 - array [object_index] [field_index]')。 –