【问题标题】:The output keeps repeating through the array输出在数组中不断重复
【发布时间】:2015-12-15 00:35:04
【问题描述】:

此代码的目的是提示用户输入十个数字,将这些数字放入一个数组中,确定该数组中的哪个数字是最小数字,并显示“最小数字是:[最小数字]”。我的代码基本上按照它的假设进行,但是当涉及到输出时,它在整个数组中给出一个 0.0 值,直到最后,也就是它给出最小数字的时候。我不明白为什么会发生这种情况,并尝试了我能想到的一切来解决它,但似乎没有任何效果。

import java.util.Scanner;

public class Question7_9 {

    public static void main(String[] args) {
        double[] array = new double[10];
        Scanner input = new Scanner(System.in);
        System.out.print("Enter ten numbers: ");
        for (int i = 0; i < array.length; i++) {
            array[i] = input.nextDouble();
            new Question7_9().min(array);
        }
    }

    public static void min(double[] array) {
        double m = array[0];
        for (int i = 1; i <= array.length - 1; i++) {
            if (m > array[i]) {
                m = array[i];   
            }
        }
        System.out.print("The minimum number is: " + m);

    }

}

【问题讨论】:

  • 看看快速排序。这是一种众所周知的排序算法,它将获取您的数组并对其进行排序。然后,您可以将数组的第一个索引显示为已排序。

标签: java arrays numbers min minimum


【解决方案1】:

您应该在初始化整个数组后(即在 for 循环之后)找到最小值:

for (int i = 0; i < array.length; i++) {
    array[i] = input.nextDouble();
}
new Question7_9().min(array);

如果您在循环中调用min 方法,您将搜索最小array.length 次,并且除了最后一次之外,您将在仍然有一些默认@ 的数组中搜索最小值987654324@ 值,因此最小值为0.0,除非您输入一些负数。

【讨论】:

    【解决方案2】:

    这是因为每次用户输入数字时,您都在运行min(array) 方法。

    只需在for 循环之后写下new Question7_9().min(array); 行。

    这是完整的运行程序,

    import java.util.Scanner;
    
    public class Question7_9 {
    
        public static void main(String[] args) {
            double[] array = new double[10];
            Scanner input = new Scanner(System.in);
            System.out.print("Enter ten numbers: ");
            for (int i = 0; i < array.length; i++) {
                array[i] = input.nextDouble();
    
            }
            new Question7_9().min(array);
        }
    
        public static void min(double[] array) {
            double m = array[0];
            for (int i = 1; i <= array.length - 1; i++) {
                if (m > array[i]) {
                    m = array[i];   
                }
            }
            System.out.print("The minimum number is: " + m);
    
        }
    
    }
    

    【讨论】:

      【解决方案3】:

      值得注意的几点:

      • 您不需要创建一个新的Question7_9 对象来调用min 方法。它是publicstatic,所以你可以只使用Question7_9.min,甚至只使用min,因为你在同一个类中调用它。
      • 在您的情况下,它实际上不需要是staticpublic。习惯于正确设置访问控制是值得的。
      • for 语句与数组一起使用时有一个简写语法:for (double val: array)
      • 您可以使用Math.min 来获取两个值中较小的一个,而不是使用if 语句
      • min 返回最小值而不是打印它更有意义。
        • min 方法将在空数组上引发异常。最好检查一下或有一个默认值(例如 Double.POSITIVE_INFINITY);

      将所有这些放在一起:

      import java.util.Scanner;
      
      public class Question7_9 {  
          public static void main(String[] args) {
              double[] array = new double[10];
              Scanner input = new Scanner(System.in);
              System.out.print("Enter ten numbers: ");
              for (int i = 0; i < array.length; i++) {
                  array[i] = input.nextDouble();
              }
              System.out.println("The minimum number is " + min(array));
          }
      
          private double min(double[] array) {
              double min = Double.POSITIVE_INFINITY;
              for (double value: array) {
                  min = Math.min(min, value);
              }
              return min;
          }
      }
      

      只是为了让您体验一下使用 Java 8 流可以让这种事情变得多么简单:

      Scanner input = new Scanner(System.in);
      DoubleStream.generate(input::nextDouble).limit(10).min()
          .ifPresent(min -> System.out.println("The minimum number is " + min));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-10-27
        • 1970-01-01
        • 1970-01-01
        • 2020-08-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-13
        相关资源
        最近更新 更多