【问题标题】:Beginner: Min Value in Array (Java)初学者:数组中的最小值(Java)
【发布时间】:2015-12-31 07:44:51
【问题描述】:

当我执行这个程序时,它打印最大值就好了,但是最小值总是打印为零。我继续摸不着头脑......谁能看到这里有什么问题?感谢观看。

    import java.util.Scanner;
    public class MinMax
    {

    public static void main(String[] args)
    {
        Scanner kb = new Scanner(System.in);
        int [] numbers = new int[5];
        int max = numbers[0]; 
        int min = numbers[0];

        for (int i = 0; i < numbers.length; i++)
        {
            System.out.println("Enter your next number:");
            numbers[i] = kb.nextInt();
            if (numbers[i] > max)
            {
                max = numbers[i];
            }
            if (min > numbers[i])
            {
                min = numbers[i];
            }
        }

        System.out.println("The maximum value in your array is " + max);
        System.out.println("The minimum value in your array is " + min);
    }

}

【问题讨论】:

    标签: java arrays sorting min


    【解决方案1】:

    问题在于,当声明数组时,数组中的整数设置为 0。将 min 设置为 numbers[0] 会将 min 设置为 0。如果这不是您的 min,您的代码将失败。

    在这种情况下,您不需要数组 - 您可以只存储用户输入的任何内容。除此之外,只需检查是否i==0 以及当它出现时,将最小值和最大值设置为numbers[0]。 (如果你没有对 max 做同样的事情,一个包含所有负数的数组将会失败。)

    【讨论】:

    • 用所有负数测试这个最大值为 0,最小值 = 用户输入数组中的实际最小值!
    【解决方案2】:

    这很简单。 min 变量永远不会更新,因为每次评估 min > numbers[i] 时都会返回 false。我们来看一个例子:

    1. min = 0.0 > numbers[i] = 4.5 -> false
    2. min = 0.0 > numbers[i] = 3.8 -> false
    3. min = 0.0 > numbers[i] = -8.9 -> true, min = -8.9
    4. min = -8.9 > numbers[i] = 7.5 -> false
    5. min = -8.9 false

    min的值为:-8.9

    在 Java 8 中,您可以使用 lambda 轻松获得最大值和最小值:

    max = Arrays.stream(numbers).max().getAsDouble();
    min = Arrays.stream(numbers).min().getAsDouble();
    

    【讨论】:

      【解决方案3】:

      正如这里的其他答案所说,问题在于 numbers[0] 开始 初始化为 0,因此无论用户输入的数字如何,您的代码仍然会发现 0 是最小值。

      您需要一个额外的状态来表示“我还没有任何最小值”。您可以使用额外的boolean 变量来表示此状态,或者如果您可以使用Integer 包装类型,则可以使用null

      例如:

      Integer minimum = null;
      Integer maximum = null;
      
      for (int i = 0; i < 5; i++) {
        int number = kb.nextInt();
        if (minimum == null || number < minimum) {
          minimum = number;
        }
        if (maximum == null || number > maximum) {
          maximum = number;
        }
      }
      
      System.out.println("minimum: " + minimum);
      System.out.println("maximum: " + maximum);
      

      【讨论】:

        猜你喜欢
        • 2021-06-13
        • 1970-01-01
        • 2013-12-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多