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

时间:2016-04-20 23:09:55

标签: java arrays drjava

当我运行此程序时,它会找到最大数字,但始终将0.0作为最小值。

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

使用Math.min和Math.max也会给出相同的错误,但也可以使用Double.POSITIVE_INFINITY和Double.NEGATIVE_INFINITY。我查看了其他几个类似的问题,我不允许使用Array.sort或人们发布的任何其他建议。

我只是想知道为什么设置两个变量到x [0]只能找到最大的数字,无论我是先声明变量,第二个还是设置它等于(Double maximum,smallest = 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);
    }
}

1 个答案:

答案 0 :(得分:2)

初始化**billing_suggested_plan avg_project_count avg_api_calls_per_month** Growth 3.13 143728 Project 2.54 124797 Startup 2.27 103131 Business 2.18 22379 Developer 1.59 4433 smallest时,您还没有将任何值放入largest,因此其元素只是数组创建的默认值,即零。

因此,如果一个值小于零,则只会找到较小的x值(如果值大于零,则只会找到较大的smallest值。)

您应该使用largestPOSITIVE_INFINITY来初始化值,因为所有值都分别小于和大于这些值。

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

或者,您可以将第一个分配移出循环:

i == 0

这可以避免重复检查x[0] = smallest = largest = kbd.nextDouble(); for (int i = 1; i<x.length; i++) { x[i] = kbd.nextDouble(); ... ,但您必须复制i == 0。我仍然使用第一种方法。