输出不断重复数组

时间:2015-09-18 00:52:25

标签: java arrays numbers min minimum

此代码的目的是提示用户输入十个数字,将数字放入数组中,确定该数组中的数字是最小数字,并显示"最小数量为:[最小数量] "我的代码基本上完成了它的假设,但是当它涉及输出时,它在整个数组中给出一个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);

    }

}

3 个答案:

答案 0 :(得分:0)

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

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

如果您在循环中调用min方法,则会搜索至少array.length次,并且除了最后一次搜索最小值0.0时一个仍然有一些默认0.0值的数组,因此除非您输入一些负数,否则最小值为{{1}}。

答案 1 :(得分:0)

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

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

这是完整的运行程序,

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);

    }

}

答案 2 :(得分:0)

值得注意的几点:

  • 您只需调用Question7_9方法即可创建新的min对象。它是public static,因此您可以使用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));