查找Java数组中的最小双精度数

时间:2013-01-30 18:57:30

标签: java arrays for-loop

我试图从用户输入中捕获最低的双倍。我只捕获初始化的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 个答案:

答案 0 :(得分:2)

首先,将i>=9j>=9更改为i<=9j<=9

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

答案 1 :(得分:2)

您可以使用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

答案 2 :(得分:1)

如果你真的需要存储所有输入,而不是找到最小,最简单的方法来使用库函数来排序数组:

...
//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;

P.S。实际上,你应该使用Double.compare来比较双打。如果输入数量不是很大,那么使用Arrays.sort()的例子就更好了,在这种情况下,第一个例子将需要更多的内存和时间来执行。

更新:Java8解决方案

double findMin(double[] input) {
 return Arrays.stream(input).min().getAsDouble();
}

答案 3 :(得分:-1)

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

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

P.S:用标准代码学习库,不要重新发明轮子。快乐!