2015-02-02 6 views
0

У меня была проблема при попытке найти минимальное расстояние и от минимального расстояния, тогда я рисую два круга на карте.Java-поиск минимального значения из цикла for

    double distance = 0; 
        double minDistance; 
        convertedHotSpotGeomList = RetrieveHotSpotAsyncTask.convertedHotSpotGeom; 
        for(int i = 0; i < convertedHotSpotGeomList.size(); i++){ 
         LatLng point1 = new LatLng(convertedHotSpotGeomList.get(i).getY(), convertedHotSpotGeomList.get(i).getX());         
         LatLng point2 = new LatLng(convertedHotSpotGeomList.get(++i).getY(), convertedHotSpotGeomList.get(++i).getX()); 
         distance = calculateHotSpot(point1, point2); 
         Log.i("DIST", String.valueOf(distance)); 
         minDistance = distance; 
         if(minDistance < distance){ 
          minDistance = distance; 
          Log.i("MIN", String.valueOf(minDistance)); 
          CircleOptions circleOptions = new CircleOptions() 
           .center(point1) 
           .radius(1000) 
           .fillColor(Color.argb(95, 178, 30, 37)) 
           .strokeColor(Color.TRANSPARENT); 

           googleBasemap.addCircle(circleOptions); 

           CircleOptions circleOptions1= new CircleOptions() 
           .center(point2) 
           .radius(1000) 
           .fillColor(Color.argb(95, 88, 130, 37)) 
           .strokeColor(Color.TRANSPARENT); 

           googleBasemap.addCircle(circleOptions1); 

         } 
        } 

В настоящее время я получаю 15, 3, 15, 14, как DIST, но я не мог получить minDist как это не печатается. Есть идеи?

Заранее спасибо.

+0

Я не понимаю, вы ищете минимальное расстояние между любыми точками на каждом круге? Может быть, математическая формула даст это. –

+0

Нет, потому что я должен рассчитать расстояние между двумя точками. Тогда для минимального расстояния для двух точек я получаю график двух кругов на нем и нахожу среднюю точку этих двух точек. –

ответ

3

Вы, вероятно, хотите:

distance = calculateHotSpot(point1, point2); 
    .... 
    if(distance < minDistance){ 
     minDistance = distance; 

и инициализировать minDistance в Double.MAX_VALUE: double minDistance = Double.MAX_VALUE

Оригинальные несколько строк не имеет особого смысла, потому что minDistance < distance никогда не имеет значение верно, так как вы просто установить minDistance = distance;

distance = calculateHotSpot(point1, point2); 
    .... 
    minDistance = distance; 
    if(minDistance < distance){ // will never happen 
     minDistance = distance; 

Вверх от:

Более полное решение, как выше точки не единственная проблема:

double minDistance = Double.MAX_VALUE; 
convertedHotSpotGeomList = RetrieveHotSpotAsyncTask.convertedHotSpotGeom; 
LatLng[] minPoints = new LatLng[2]; // save the minimum points 
for(int i = 0; i < convertedHotSpotGeomList.size(); i++){ 
    LatLng point1 = new LatLng(convertedHotSpotGeomList.get(i).getY(), convertedHotSpotGeomList.get(i).getX());         
    LatLng point2 = new LatLng(convertedHotSpotGeomList.get(++i).getY(), convertedHotSpotGeomList.get(++i).getX()); 
    distance = calculateHotSpot(point1, point2); 
    Log.i("DIST", String.valueOf(distance)); 
    if(distance < minDistance){ 
     minDistance = distance; 
     Log.i("MIN", String.valueOf(minDistance)); 
     minPoints[0] = point1; 
     minPoints[1] = point2; 
    } 
} 
// we finish all the comparison, so we draw the circles now 
if(minPoints[0]!=null && minPoints[1] !=null){ 
    CircleOptions circleOptions = new CircleOptions() 
     .center(minPoints[0]) 
     .radius(1000) 
     .fillColor(Color.argb(95, 178, 30, 37)) 
     .strokeColor(Color.TRANSPARENT); 
    CircleOptions circleOptions1= new CircleOptions() 
     .center(minPoints[1]) 
     .radius(1000) 
     .fillColor(Color.argb(95, 88, 130, 37)) 
     .strokeColor(Color.TRANSPARENT); 

    googleBasemap.addCircle(circleOptions); 
    googleBasemap.addCircle(circleOptions1); 
} 
+0

Итак, я объявляю свое minDistance равным 0 или? –

+0

@IWasSoLost Используйте 'Integer.MAX_VALUE', позвольте мне обновить в своем ответе –

+0

Я вижу, но как я могу убедиться, что это только minDistance, тогда я рисую круг? Потому что в настоящее время я получаю два набора кругов на карте. С minDistance напечатано как 15 и 3 –

2

Ваша проблема заключается в этих двух линий рядом друг с другом:

    minDistance = distance; 
        if(minDistance < distance){ 

Так первый вы установка minDistance на значение расстояния. Затем вы проверяете, не является ли minDistance меньше расстояния. Поскольку он будет никогда не быть меньше значения, которое вы только что установили, этот блок кода никогда не будет оцениваться.

+0

Я вижу. Большое спасибо! –

Смежные вопросы