我正在攻读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.
。谢谢!
答案 0 :(得分:2)
考虑一下代码片段
n -= sign(n);
n += sign(n);
如果sign(n)
在第一个语句后没有改变,那么n
的值在执行片段后将保持不变(因为你只是在添加然后减去相同的值)。 / p>
现在,第一个声明后sign(n)
何时会发生变化?如果您考虑一下,仅如果n
是1
或-1
,那么n == sign(n)
,那么第一个语句将离开{ {1}} n
。由于0
,如果sign(0) == 0
为n
,则第二个语句将无效。因此,如果0
为n
或1
,则上面的代码片段将生成-1
n
。对于所有其他0
,将不会有任何更改。
总而言之,我们在这里做的是循环数组,并为每个元素
n
或1
,请将其设为-1
答案 1 :(得分:1)
如果你一步一步地执行你的代码,你会明白,这段代码非常基本......你自己说的:如果是负-1,如果是正数1,否则为0 ......
你知道 - =和+ =用于什么?