1

ユーザー入力から最低の double をキャッチしようとしています。初期化された最小変数の値のみをキャッチしています - 何が欠けていますか? ありがとう!

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

まず、i>=9andj>=9i<=9and j<=9in に変更します。

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

そうしないと、ループは事実上 no-ops になります。

はるかに堅牢なアプローチは、ループを次のように記述することです。

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

またはそのように:

for (double val : a) {

最後に、最小値を見つけるには、配列を 1 回だけ繰り返し、各要素を現在の最小値と比較します (ただし、min適切に初期化するようにしてください!)

于 2013-01-30T18:58:27.263 に答える
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 を使用して double を比較する必要があります。したがって、入力数が多くない場合は Arrays.sort() を使用した例の方が適切です。この場合、最初の例では実行に多くのメモリと時間がかかります。

更新: Java8 ソリューション

double findMin(double[] input) {
 return Arrays.stream(input).min().getAsDouble();
}
于 2013-01-30T21:36:40.933 に答える
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 に答える