2013-04-07 48 views
1

我正在學習Java考試,我似乎無法正確解決這個示例問題。Java:解決考試的樣本問題

假設方法INT符號(INT x)返回1,如果x爲正數,-1,如果x爲負和0,如果x爲0。給定:

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

什麼的元素的值下面的代碼執行後的數字?

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

考慮一下代碼片段

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

如果sign(n)拳頭後聲明並沒有改變,則執行後的片段(因爲你只是將被添加,然後的n值將保持不變減去相同的值)。

現在什麼時候sign(n)會在第一條語句後改變?如果你想想看,僅如果n要麼1-1,在這種情況下n == sign(n)等第一條語句將在0離開n。由於sign(0) == 0,如果n0,第二條語句將不起作用。因此,如果n1-1,則上面的代碼片段將導致n0。對於所有其他n,不會有任何變化。

全部放在一起,就是我們這裏做的是循環在陣列上,並且對於每一個元素,

  1. 如果它要麼是1-1,將其設置爲0
  2. 否則,離開它是如此。
+0

感謝您的解釋。我在Java新,所以它花了我幾分鐘消化! – hhart 2013-04-08 01:35:21

1

,如果你按照你的代碼一步一步你就會明白的執行,該代碼是非常基本的...你自己說的那樣:如果爲負-1,如果正1,否則爲0 ...

你知道什麼是 - =和+ =用於?