错误排序数组中的负数(双)

时间:2014-01-20 00:33:09

标签: java arrays sorting negative-number

在这里,我们面临一个奇怪的问题,即对两个数组进行排序:其中的数字是显示这些数组的顶部和底部,最大值和最小值的关键,以便将它们绘制成一条线。

以下是两个数组:

double[] hor = {5.938, 5.989, 6.047, 6.105, 6.159, 6.211, 6.260, 6.314, 6.351};
double[] vert = {-6.589,-6.348, -5.991, -5.691,- 5.491, -5.203, -4.989,- 4.805, -4.650};

a和功能:

public void escala(double[] hor, double[] vert) {

    double minX = Double.MAX_VALUE;
    double maxX = Double.MIN_VALUE;
    for (double x : hor) {
        if (x < minX)
            minX  = x;
        if (x > maxX)
            maxX  = x;

    }
    double minY = Double.MAX_VALUE;
    double maxY = Double.MIN_VALUE;
    for (double y : vert) {
        if (y < minY)
            minY  = y;
        if (y > maxY)
            maxY  = y;
    }

    double margin=0.00;
    final double actualMaxY = maxY+margin*(maxY-minY);
    final double actualMinY = minY-margin*(maxY-minY);
    final double actualMaxX = maxX+margin*(maxX-minX);
    final double actualMinX = minX-margin*(maxX-minX);

    System.err.println("actualMinY==" + actualMinY);
    System.err.println("actualMaxY==" + actualMaxY);

    cgraf.setLimits(actualMinX, actualMaxX, actualMinY, actualMaxY, (maxX-minX)/5, (maxY-minY)/10);
    ccur.setLimits(actualMinX, actualMaxX, actualMinY, actualMaxY, (maxX-minX)/5, (maxY-minY)/10);

}

结果令人头痛的是:

  • 最大值= 0.000(当然,4.9E-324)
  • 最小值= -6.589

适用于具有正数的数组。但是使用这个负数数组,它会崩溃。有关如何更改代码以使其能够工作的任何想法吗?

预期结果是:

  • 最大值= -4.650
  • 最小值= -6.589

需要此函数将值发送到applet中的图形类。

1 个答案:

答案 0 :(得分:4)

问题在于

double maxY = Double.MIN_VALUE;

接近0,实际上它是4.9E-324,相当于4.9 * Math.pow(10, -324)。这就是排序不起作用的原因。你可以试试

double maxY = -Double.MAX_VALUE;

代替。

Double.MIN_VALUE一个常量,保持double类型的最小正非零值,2 ^( - 1074)。

注意:您可能还想更改maxX

修改:您可能还会感兴趣:Double.NEGATIVE_INFINITY