查找数组的最小和最大数量

Finding the min and max number of an array

当我 运行 这个程序时,它找到最大数但总是打印 0.0 作为最小值。

当我使用 Double.POSITIVE_INFINITY 和 Double.NEGATIVE_INFINITY 而不是将最小和最大设置为 x[0] 时,它工作正常。

使用 Math.min 和 Math.max 也会给我同样的错误,但也适用于 Double.POSITIVE_INFINITY 和 Double.NEGATIVE_INFINITY。我查看了其他几个类似的问题,但不允许我使用 Array.sort 或人们 post.

的任何其他建议

我只是想知道为什么将两个变量都设置为 x[0] 只能找到最大的数字,无论我首先声明该变量,第二个还是将其设置为相等(双最大,最小 = x[0] ).

public class MaxAndMin {
    public static void main (String[] args) {
        Scanner s= new Scanner(System.in);
        System.out.println("How many numbers would you like to enter?");
        int n= s.nextInt();

        double[] x= new double[n];
        double smallest= x[0]; //double smallest= Double.POSITIVE_INFINITY; 
        double largest= x[0]; //double largest= Double.NEGATIVE_INFINITY;

        for (int i=0; i<x.length; i++) {
            x[i]= kbd.nextDouble();

            if (x[i] > largest) {
                largest = x[i];

            } else if (x[i] < smallest) {
                smallest = x[i];
            }
        }
        System.out.println("Smallest number: " + smallest + " Largest number: " + largest);
    }
}

当您初始化 smallestlargest 时,您没有将任何值放入 x,因此它的元素只是创建数组时使用的默认值,即零。

因此,如果 1 小于零,您只会找到较小的 smallest 值(如果 1 大于零,则只会找到较大的 largest 值)。

您应该使用 POSITIVE_INFINITYNEGATIVE_INFINITY 来初始化值,因为所有值分别小于和大于它们。


或者,您可以在 i == 0 时在 for 循环中初始化 smallest = largest = x[0]。但是,前一种方法更可取,因为它不需要在每次迭代时检查 i == 0


或者,您可以将第一个赋值移出循环:

x[0] = smallest = largest = kbd.nextDouble();
for (int i = 1; i<x.length; i++) {
  x[i] = kbd.nextDouble();
  ...

这避免了重复检查 i == 0,但您必须复制 kbd.nextDouble()。我仍然会使用第一种方法。