输出在数组中不断重复
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
方法。它是public
static
,所以你可以只使用Question7_9.min
,甚至只使用min
,因为你在同一个类中调用它。
在您的情况下,它实际上不需要是static
或public
。习惯于正确设置访问控制是值得的。
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));
【讨论】:
以上是关于输出在数组中不断重复的主要内容,如果未能解决你的问题,请参考以下文章