2

isOrdered呼び出された int の指定された配列の要素が非減少順である場合は boolean 変数を true に設定し、そうでない場合は isOrdered を false に設定するループの Java コードを記述します。

int i[] = { 1, 2, 3, 4, 5 };
int b = 0;
boolean isOrdered = false;
while (b < i.length) {
    if (i[0] <= i[b]) {
        isOrdered = true;
    }
    b++;
}
out.println(isOrdered);

私はこれを正しくやっていますか?

4

3 に答える 3

3

何が悪いのか見てみましょう。

if (i[0] <= i[b])

これは、あなたのコードで私を悩ませている主な領域です。次の値が低い/高いかどうかをどのように確認していますか?i[b]インデックス 0 の値とインデックス b のみを比較しています!

基本的に、コードはループで次のようになります。

/週int i[] = { 1, 2, 3, 4, 5 };

i[0] i[b]
1     1
1     2
1     3
...

あなたは絵を正しく理解していますか?本当に必要なのは、次の値を確認することですb.

コードは次のようになりますi[b] > i[b+1]

isOrdered正直なところ、 true と falseの順序をどのように初期化したかで、おそらく機能させることができます。最初に true に初期化します。次に、質問に誤りが見つかった場合に、実行中のプロセスから抜け出すというアイデアfalse.です。

反復

boolean isOrdered = true;

while(isOrdered && array.length - 1 > b){
     if(array[b] > array[b+1]) isOrdered = false;
     b++;
}

再帰的な

boolean isOrdered(int[] array, index){
    if(index == array.length - 1) return true;
    if(array[index] > array[index + 1]) return false;
    return isOrdered(array, index + 1);
} 

このための再帰的な方法は、waaaaaaaaaaayの方がクールです。

于 2013-09-18T20:37:30.963 に答える
0

配列のサイズに対して for ループを実行して、次の項目が現在の項目よりも小さいかどうかを確認します。

   int arr[] = { 1, 2, 3, 4, 5 };
    int b = 0;
    boolean isOrdered = true;
    for (int i = 0; i< arr.length - 1 ; i ++) {
        if (arr[i] > arr[i+1])
        {
            isOrdered = false;
            break;
        }
        b++;
    }
    out.println(isOrdered);
于 2013-09-18T20:32:02.567 に答える
0

いいえ; 配列の最初の要素が要素の少なくとも 1 つより小さいか等しいかどうかのみをチェックします。最初の要素自体は常にそれ自体と等しくなり、残りの要素が何であれ、に設定isOrderedされます。true

ヒント #1: 最初の要素を除くすべての要素をその直前の要素と比較する必要があります。

ヒント #2: 楽観的になり、配列が順序付けられていると想定してから、反例を検索する必要があります。順序付けに違反する要素のペアを見つけたら、isOrderedfalse に設定してループから抜け出します。

于 2013-09-18T20:26:13.127 に答える