1

これは過去の論文からの質問です。arrayMin配列内の最小値を見つけるための静的メソッドを作成するように依頼されましたarr

while ループを使用する必要があり、反復ごとに、変数は最初の要素minから最小の数値を返します。i

別のメソッド/for ループを呼び出さずに、while ループを厳密に使用せずにこれを行う方法はありますか。質問は 4% しか価値がないためです (ループ不変条件と javadoc の記述を含む)。問題を複雑にしすぎているかどうかはわかりません。

public class Revision {

public static int arr[] = new int[] { 5, 8, 4, 3, 6, 2 };
public static int min = 1;

public static int arrayMin() {

    int i = 0;

    if (arr == null) {
        return 0;

    } else {
        while (i < arr.length) {
            // some function/method call to find smallest number of arr[i]
            i++;
            return min;
        }
    }
    return min;
}

public static void main(String[] args) {

    System.out.println(arrayMin());
}

}

4

4 に答える 4

8

いくつかのこと:

  1. 配列は静的であってはならず、パラメーターとしてarrayMinメソッドに渡す必要があります。
  2. min静的ではなく、ローカルarrayMin変数にする必要があります。
  3. minに初期化する必要がありますInteger.MAX_VALUE。で初期化し12たまたま配列の最小値になった場合、それを返すことはありません。
  4. メソッドから複数回戻ることはできません。するとすぐreturn minに、メソッドは終了します。変数 min が最初の i 要素句から最小の数を返すことについて、おそらく混乱があるでしょう。おそらく、各反復で、変数は最初の要素から最小の数min持つ(返さない) ことを意味します。i

リファクタリングは次のとおりです。

public static int arrayMin(int[] arr) {
    int i = 0;
    int min = Integer.MAX_VALUE;
    if (arr == null) {
        return 0; // What if 0 is the minimum value? What do you want to do in this case?
    } else {
        while (i < arr.length) {
            if (arr[i] < min) {
              min = arr[i];
            }
            i++;
        }
    }
    return min;
}
于 2012-08-25T13:15:36.043 に答える
6

というループの外側に変数が必要ですminminループを使用して配列の最小値を見つけ、ループが完了すると戻ります。

} else {
    int min = Integer.MAX_VALUE;

    while(i < arr.length) {
        // is arr[i] < min? If so, it's the new minimum
        i++;
    }

    return min;
}
于 2012-08-25T13:12:36.093 に答える
0

インデックス変数を使用して、正のヒット数を追跡​​できます。対応する数値のインデックス値が配列サイズより 1 小さい場合、その数値が最小になります。

class testtt{
    static int small=0;
    public static void  main(String[] args) {
        int arr[] = {9,2,3,4,5,6,7,8};      
        int i,index=0;      
        for(int q:arr)
        {                   
            for(i=0;i<arr.length;i++)
            {               
                if(q<arr[i])
                {
                    small=q;
                    index++;
                }
            }
            if(index==arr.length-1)
                System.out.println(small);  
        }   

    }
}
于 2015-08-14T05:26:50.897 に答える