2011-09-11 55 views
1

下一個問題是測試,我已經做了..我已經運行在BlueJ的代碼,不知道爲什麼返回值是5 ...爪哇 - for()循環和數組

public int mystery(int[] myStuff, int num) { 

    for (int k = myStuff.length - 1; k >= 0; k--) { 
     if (myStuff[k] < num) { 
      return k; 
     } 
    } 

    return -1; 
} 

myStuff = 2,4,0,1,-6,3,8,7,5

num = 4

在我寫的試驗 - 0爲什麼5?我不明白!

什麼的

`return -1` 

的一部分嗎?

+3

嗯,我不明白你爲什麼認爲答案是0。 – BoltClock

+0

測試是在紙上,這是最後一個問題..我寫了很多次,並且我得到了... – Oshrib

+0

myStuff [k]在最後一次運行off for循環= k = 0。k [0] = 2. 2 <4 ...所以返回k = 0.這是我的錯誤,但我不明白爲什麼。我知道這是錯誤的..但爲什麼 – Oshrib

回答

2

你得到5,因爲這是它的值數組中的第一個元素的指數小於4(從最後一個元素開始然後向第一工作時)。請注意,您有:

return k; 

...其中k是您的數組索引。如果您想獲得該索引的價值,你應該做的:

return myStuff[k]; 

這裏有一個簡單的例子,說明你的結果,其實是正確的:http://ideone.com/7byIY

而且return -1;只是說:「如果沒有元素小於指定的數字,則返回值-1以表示未找到匹配「。這不是一種不常見的做法(返回有意選擇的無效值來表示沒有結果)。

+0

所以......這裏的幾個傢伙告訴「最大的價值」,你說「第一個元素...」,我想你是對的(他們回答沒有錯我猜測......但是..你的解釋對我來說是最好的 – Oshrib

2

它返回5,因爲這是輸入數組中3的索引,這是從數組尾部開始嚴格小於4的第一個數字。如果沒有你的數組中的項目滿足「嚴格小於NUM小」的標準

return -1;會被處決。

1

的功能對應於小於所述目標的值的陣列中返回最大索引。這是通過從後面掃描並返回對應於小於目標值的第一個索引在任意數組上完成的。在你的例子中,索引5中的3 < 4,所以這是正確的答案。如果沒有發現小於目標的值,則將-1用作標記值以指示算法未能找到有效答案。

1

該函數給出了最後一個數字的,這比第二個參數小於第一個參數的位置(或-1,如果所有的數字比第二個參數大; -1是沒有機會的模糊性,因爲一個特殊值沒有位置-1)。

即數爲3,它的位置是圖5(從0開始)。

+0

哦...我忘了規則。如果聲明停止時,它得到了...如果... – Oshrib

1

該函數只是搜索其是大於或小於等於num陣列中的最後一個值。讓我們來計算校驗myStuff[k] < 4所有值:

0  1  2  3  4  5  6  7  8 // k 
    2  4  0  1 -6  3  8  7  5 // myStuff[k] 
true false true true true true false false false // myStuff[k] < 4 

針對myStuff[k] < 4是真正的最後一個索引顯然是5,所以這是正確的答案。

return -1是需要的,以便函數返回一個值,即使所有myStuff的元素都大於num。例如,對於num = -99,結果將爲-1。

0

您的返回-1對於您在此傳遞的參數沒有任何意義。 由於條件對於值3是正確的,所以它返回k的值,這只不過是5 bt的那個移動。這是因爲你正在向後迭代。

0

神祕(的MyStuff = [2,4,0,1,-6,3,8,7,5],4)

則用於開始

對(INT K = 8; K> = 0; K--) 如果(的MyStuff [8] = 5 < 4) - NO

第二迭代

程k = 7,如果(7 < 4) - NO

.. 。等等

k = 6的如果(8 < 4) - NO

K = 5,如果(3 < 4) - 是 - 所以返回K = 5

最後部分是指: 如果的MyStuff不有任何價值<數然後它返回-1

+0

當if得到時:k = 5 if(3 <4) - YES - 所以返回k = 5 - 它停止了,不要contenu到下一個值? k [4] = - 6)? – Oshrib

+0

是的,因爲返回結束了方法的執行。http://www.java-samples.com/showtutorial.php?tutorialid=280 – darlinton