0
private int[] myStuff;
/** Precondition: myStuff contains int values in no particular order.
  /*/ 
public int mystery(int num)
{
    for (int k = myStuff.length-1; k>=0; k--)
    {
        if (myStuff[k] < num)
        {
           return k;
        }
    }
return -1;
}

次のステートメントが実行された後の myStuff の内容を最もよく表しているのはどれですか?

int m = mystery(n); 

回答: m+1 から myStuff.length-1 までの位置にあるすべての値は、n 以上です。

この答えが正しい理由を説明できる人はいますか? 内容が何を意味するのかはわかりませんが、コードは myStuff の値を変更しないため、myStuff は変更されていないと結論付けました。

4

3 に答える 3

1

前提条件は、myStuffには特定の順序で整数値が含まれていないことを示しています。for ループは、 myStuffの長さから 1 を引いた長さに等しいkで初期化され(配列インデックスはゼロから始まるため)、kがゼロ以上である間反復し、各反復でkから 1 を減算します。

ifステートメントを見ると、myStuff[k]の対応するインデックスの値がnより小さい場合、 kの現在の値が返されます。したがって、返された値に 1 を加えた値より大きい配列インデックスのすべての値は、n以上である必要があります。また、 myStuffにnより大きい整数がない場合は、マイナス 1 が返されます。

これが役立つことを願っています。

ところで - mySyuffの内容が変更されていないことは正しいです。

于 2013-04-09T16:32:54.367 に答える
1

変更されていないことは正しいですmyStuff。ただし、配列内のデータ、関数の戻り値、および関数の引数の関係について質問しています。

コードは次のことを行います。

  • 配列を逆順に繰り返します。(ループ用)
  • 反復中の各インデックスで、そのインデックスの値を に対してチェックし、が大きいn場合は現在のインデックスを返します。n(if文)

では、メソッドは何を返すのでしょうか? の末尾から最初のインデックスを返しますmystuff[m] < n。( mystuff[i] >= num)

于 2013-04-09T16:32:56.903 に答える
0

内容についての質問は有効です。内容自体が変更されたかどうかは関係ありません。

このメソッドは、未満のk( からmyStuff.length-1まで0) がある場合、またはのすべての要素が より大きいか等しい場合に、負でない数値を返します。myStuff[k]n-1myStuffn

両方のケースを考えてみましょう:

  • m は非負の数です - これは、位置が条件を満たした右からm最後だったことを意味します。あなたの答えは正しいですmyStaff[m] < n

  • m は-1- すべての要素が よりも大きいm+1(この場合は0) であることを意味します - したがって、答えは正しいです

于 2013-04-09T16:39:43.623 に答える