Java从for循环中找到最小值

Posted

技术标签:

【中文标题】Java从for循环中找到最小值【英文标题】:Java finding minimum value from for loop 【发布时间】:2015-04-01 14:51:50 【问题描述】:

我在尝试找到最小距离时遇到了一些问题,然后从最小距离开始,我在地图上绘制了两个圆圈。

                    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,因为它没有打印出来。有什么想法吗?

提前致谢。

【问题讨论】:

我不明白,您是在寻找每个圆上任意点之间的最小距离吗?也许一个数学公式会给出它。 不,因为我必须计算两点之间的距离。然后对于两点的最小距离,我在上面绘制两个圆圈并找到这两个点的中点 【参考方案1】:

你可能想要:

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

并将minDistance初始化为Double.MAX_VALUEdouble minDistance = Double.MAX_VALUE

最初的几行没有多大意义,因为minDistance &lt; 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);

【讨论】:

所以我声明我的 minDistance 为 0 还是? @IWasSoLost 使用Integer.MAX_VALUE,让我更新我的答案 我明白了,但我如何确保它只是 minDistance 然后我绘制圆圈?因为目前我在地图上得到了两组圆圈。 minDistance 打印为 15 和 3 @IWasSoLost 好的,我的代码还有其他问题,让我把它也包含在我的帖子中。 @IWasSoLost 好的,请查看更新后的帖子【参考方案2】:

你的问题在于这两行并排:

                    minDistance = distance;
                    if(minDistance < distance)

所以首先你将 minDistance 设置为距离的值。然后您正在检查 minDistance 是否小于距离。由于它永远不会小于您刚刚设置的值,因此该代码块永远不会计算。

【讨论】:

以上是关于Java从for循环中找到最小值的主要内容,如果未能解决你的问题,请参考以下文章

我想在 for 循环中找到最小值/最大值 [关闭]

如何找到三个(for循环)之间的最小值?

在 for 循环中找到最小值并保留它的索引

寻找For循环数组C ++中最大和最小值的值

你如何使用 for 循环来找到最小值而不使用类似于 Python 上的“min”的东西?

如何在java中打印数组中的最小值? [复制]