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)第一次声明之后什么时候会改变?如果您考虑一下,只有ifn1or -1,在这种情况下n == sign(n),第一个语句将离开nat 0。因为, , 如果是sign(0) == 0, 第二个语句将无效。因此,如果是或,则上面的代码片段将导致of 。对于所有其他,不会有任何变化。n0n1-1n0n

综上所述,我们在这里所做的是遍历数组,并且对于每个元素,

  1. 如果是1or -1,则将其设置为0
  2. 否则,保持原样。
于 2013-04-07T22:59:39.453 回答
1

如果你一步一步地执行你的代码,你就会明白,这段代码非常基本......你自己说过:如果为负 -1 如果为正 1 否则为 0...

你知道 -= 和 += 是干什么用的吗?

于 2013-04-07T22:59:33.530 回答