输出在数组中不断重复

Posted

技术标签:

【中文标题】输出在数组中不断重复【英文标题】: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);

    


【问题讨论】:

看看快速排序。这是一种众所周知的排序算法,它将获取您的数组并对其进行排序。然后,您可以将数组的第一个索引显示为已排序。 【参考方案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));

【讨论】:

以上是关于输出在数组中不断重复的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode题解

在c语言中输入数组两个数组,查找重复元素并输出怎么写啊

C语言,删除数组中的重复数字然后输出

c语言编程:输出数组中重复出现的数

即使元素存在于数组中,也总是找不到输出[重复]

46.Permutations