1

我试图从用户输入中捕捉最低的双倍。我只捕获初始化的 min 变量的值 - 我错过了什么?谢谢!

public static void main(String[] args) {

    double[] lowNum = new double[10];
    Scanner input = new Scanner(System.in);

    for (int i=0; i<=9; i++) {
        System.out.println("Enter a double: ");
        lowNum[i] = input.nextDouble();
    }
    input.close();
    double min = calcLowNum(lowNum);
    System.out.println(min);
}


public static double calcLowNum(double[] a) {
    double min=0;
    for (int i=0; i>=9; i++){
      for (int j=0; j>=9; j++){
          if (a[i]<=a[j] && j==9){
              min=a[i];
          }
          else {
              continue;
      }
    }
    }

    return min;
4

4 回答 4

4

您可以只使用Collections#min来找到最小值。不过,您将需要Apache Commons-Lang这个。

// This would be the array 'a'
double[] array = {15, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};

// Convert the primitive array into a Class array
Double[] dArray = ArrayUtils.toObject(array);
List<Double> dList = Arrays.asList(dArray);

// Find the minimum value
Double returnvalue = Collections.min(dList);

return returnvalue; // or you can do returnvalue.doubleValue() if you really want
于 2015-02-12T14:27:53.333 回答
3

如果您确实需要存储所有输入,而不是找到最小、最简单的方法来使用库函数对数组进行排序:

...
//sorting array, so first element will be the lowest
Arrays.sort(lownum);

double min = lownum[0];

我同意 Peter Lawree 你实际上并不需要所有的数组。您需要保存第一个输入,并将以下所有内容与其进行比较,如果较低则存储:

double lastInput=0, min=0;
for (int i=0; i<=9; i++) {
   System.out.println("Enter a double: "); 
   lastInput = input.nextDouble();
   if (0==i) {
       //if this is first iteration, save first input as min
       min=lastInput;
   } else {
       if (lastInput<min) min=lastInput;
   }
}
return min;

PS 实际上,您应该使用 Double.compare 来比较双打。因此,如果输入数量不大,则使用 Arrays.sort() 的示例会更好,在这种情况下,第一个示例将花费更多的内存和时间来执行。

更新:Java8 解决方案

double findMin(double[] input) {
 return Arrays.stream(input).min().getAsDouble();
}
于 2013-01-30T21:36:40.933 回答
3

首先,将i>=9and更改j>=9i<=9and j<=9in:

for (int i=0; i>=9; i++){
  for (int j=0; j>=9; j++){

否则,您的循环实际上是无操作的。

一个更健壮的方法是像这样编写循环:

for (int i = 0; i < a.length; i++) {

或者像这样:

for (double val : a) {

最后,找到最小值可以通过只遍历数组一次来完成,将每个元素与当前最小值进行比较(但请确保正确初始化min!)

于 2013-01-30T18:58:27.263 回答
0

OMG,遍历数组 - 这是最糟糕的解决方法(但我的英语不好比它更糟糕)。查看http://code.google.com/p/guava-libraries/这个库包含满足您需要的健壮代码(事实上,您的项目中必须有库)。您可以查看和分析来源 - 它是免费的,但您在最佳实践中的经验将随着我的英语技能的增长而增长。以下是番石榴代码的示例:

  public static double min(double... array) {
    checkArgument(array.length > 0);
    double min = array[0];
    for (int i = 1; i < array.length; i++) {
      min = Math.min(min, array[i]);
    }
    return min;
  }

PS:用标准代码学习库,不要重新发明轮子。要开心!

于 2013-01-30T19:25:08.800 回答