1

私は Java 試験のために勉強していますが、このサンプル問題を正しく解決できないようです。

メソッド int sign(int x) が、x が正の場合は 1、x が負の場合は -1、x が 0 の場合は 0 を返すとします。

int[] nums = {-2, -1, 0, 1, 2};

次のコードを実行した後の nums の要素の値は?

for(int k=0; k<nums.length; k++)
{
nums[k] -= sign(nums[k]);
nums[k] += sign(nums[k]);
}

これは私がそれを解決しようとした方法のスニペットです:

nums k -= sign (nums [k])
nums [0] = nums[0]- sign (nums[0])
nums [0] = (-2) - (0)
nums [0] = -2

答えにたどり着く方法を誰か説明してもらえますか: -2, 0, 0, 0, 2.. ありがとう!

4

2 に答える 2

2

コードフラグメントを少し考えてみましょう

n -= sign(n);
n += sign(n);

sign(n)最初のステートメントの後で が変更されない場合n、フラグメントが実行された後も の値は変更されません (同じ値を加算してから減算するだけなので)。

sign(n)では、最初のステートメントの後、いつ変更されますか? 考えてみると、がまたはの場合のみ、その場合、最初のステートメントはで終了します。であるため、が の場合、2 番目のステートメントは効果がありません。したがって、が または のいずれかである場合、上記のコード フラグメントはof になります。その他のすべての場合、変更はありません。n1-1n == sign(n)n0sign(0) == 0n0n1-1n0n

すべてをまとめると、ここで行っていることは、配列をループして、各要素に対して、

  1. 1またはのいずれかの場合は-10
  2. それ以外の場合は、そのままにしておきます。
于 2013-04-07T22:59:39.453 に答える
1

コードの実行を順を追って実行すると、このコードは非常に基本的なものであることがわかります...あなたは自分でそれを言いました:負の場合 -1 正の場合 1 それ以外の場合は 0...

-= と += が何に使われているか知っていますか?

于 2013-04-07T22:59:33.530 に答える