最大值未返回正确的值

时间:2014-04-11 01:42:13

标签: java if-statement

我似乎无法获得随机生成点距离的单个MAX值。 因此,我不能创造必要的最长距离。

        for(int i = 0; i < pts.length; i++) {
            pts[i] = new Point2D(Math.random(), Math.random());
            StdDraw.setPenColor(StdDraw.RED);
            StdDraw.setPenRadius(0.008);
            pts[i].draw();

            for(int j = 0; j < i; j++) {
                double distance[] = { pts[i].distanceTo(pts[j]) };
                for(int k = 0; k < distance.length; k++ ) {
                    while(distance[k] > max) {
                        max = distance[k];
                        if(max > 0) {
                            System.out.println(max);
                            StdDraw.setPenColor(StdDraw.BLACK);
                            StdDraw.setPenRadius(0.002);
                            pts[i].drawTo(pts[j]);

1 个答案:

答案 0 :(得分:1)

因此,在你最内层的for循环中,只需检查每个距离并存储max。一旦完成循环,执行绘图。为此,您需要在全球某处存储点的索引(i和j)。所以像这样:

// declare these guys to keep track of where to draw
int maxI = 0; 
int maxJ = 0;

for (int i = 0; i < pts.length; i++){
    pts[i] = new Point2D(Math.random(), Math.random());
    StdDraw.setPenColor(StdDraw.RED);
    StdDraw.setPenRadius(0.008);
    pts[i].draw();
    for (int j = 0; j<i; j++){
        double distance[] = {pts[i].distanceTo(pts[j])};
        for (int k = 0; k <distance.length; k++ ){
            if (distance[k] > max){
                max = distance[k];
                maxI = i;
                maxJ = j;
            }
        }
    }
}

if (max > 0){
    System.out.println(max);
    StdDraw.setPenColor(StdDraw.BLACK);
    StdDraw.setPenRadius(0.002);
    pts[maxI].drawTo(pts[maxJ]);
}