Java:解决考试样本问题

时间:2013-04-07 22:37:53

标签: java

我正在攻读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.。谢谢!

2 个答案:

答案 0 :(得分:2)

考虑一下代码片段

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

如果sign(n)在第一个语句后没有改变,那么n的值在执行片段后将保持不变(因为你只是在添加然后减去相同的值)。 / p>

现在,第一个声明后sign(n)何时会发生变化?如果您考虑一下,如果n1-1,那么n == sign(n),那么第一个语句将离开{ {1}} n。由于0,如果sign(0) == 0n,则第二个语句将无效。因此,如果0n1,则上面的代码片段将生成-1 n。对于所有其他0,将不会有任何更改。

总而言之,我们在这里做的是循环数组,并为每个元素

  1. 如果是n1,请将其设为-1
  2. 否则,保持原样。

答案 1 :(得分:1)

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

你知道 - =和+ =用于什么?