2010-07-16 73 views
1

所以我一直在CodingBat網站上練習我的Java編程技巧,當時遇到this問題。在它裏面,你必須做一個簡單的方法,它接受一個動態長度的整數數組,檢查數組中的元素是否以遞增順序(1,2,3,15678等),並返回「true 「如果爲真,或者如果整數不按順序,則爲」假「。變量未在for循環中初始化

首先,我初始化一個名爲「result」的布爾變量。然後,我遍歷該方法傳遞的整數數組。如果當前索引值小於下一個索引值,則將「result」設置爲「true」,然後重複循環。否則,我會將「結果」設置爲「假」,跳出循環並將「結果」設置爲「假」。在FOR循環之後,我返回「結果」。

但是,我一直在收到一個錯誤消息,「結果」尚未正確初始化。我可以理解JVM的混淆,但我認爲在IF/ELSE語句中設置「result」的值可以解決這個問題。

下面是代碼的副本,我迄今所做的:

public boolean scoresIncreasing(int[] scores) { 
    boolean result; 
    for (int i = 0; i < scores.length; i++) { 
     if (i < (i + 1)) { 
      result = true; 
     } 
     else { 
      result = false; 
      break; 
     } 
    } 
    return result; 
} 

回答

2

首先,我<我+ 1將永遠是真實的,除非我= Integer.maxValue,在這種情況下,你會繞回到Integer.minValue。

你想要的是分數[i] <分數[i + 1],你需要調整你的循環值以避免索引超出上一次迭代的界限。

所以,你的代碼固定:

public boolean scoresIncreasing(int[] scores) { 
    boolean result; 
    for (int i = 0; i < scores.length-1; i++) // fix loop end 
    { 
     if (scores[i] < scores[(i + 1)]) { 
      result = true; 
     } 
     else { 
      result = false; 
      break; 
     } 
    } // missing brace 
    return result; 
} 

試試這個作爲替代。它的工作原理是,一旦出現錯誤,您可以立即離開。

public boolean scoresIncreasing(int[] scores) { 
    boolean result = true; // assume true 
    for (int i = 0; i < scores.length-1; i++) // fix loop end 
    { 
     if (scores[i] > scores[(i + 1)]) return false; 
    } // missing brace 
    return result; 
} 

當然,您可能想在開始時引入邊界檢查以確保至少有兩個值。

0

如果得分爲0的元素? ;]

+1

問題描述狀態:*數組長度爲2或更長* – 2010-07-16 19:41:42

0

在您的代碼中,您正在返回for循環內的結果(在if-else語句之後)。

添加return語句之前,另一架(關閉的循環)

1

你只是return result之前缺少一個右括號(})。

爲了簡化代碼(並處理0個元素的數組!),您可能需要將result初始化爲true。然後,當您遍歷數組時,如果並且僅當您發現某個元素出現亂序,請將result更改爲false

另一個警告字。在for循環中使用元素i + 1。想想當你得到數組中的最後一個元素時會發生什麼(i == scores.length - 1)。

+0

哎呀!我完全錯過了最後一部分!我會在我的代碼上解決這個問題。謝謝你的提示! – Jules 2010-07-16 19:45:34

+0

正如巴特提到的,還要確保替換比較數組元素('分數[i]'),*不是*'我'本身。 – 2010-07-16 19:47:05

1

if (i < (i + 1))將始終評估爲true。您需要比較這些索引處的數組內容,而不是索引本身。

喜歡的東西:

public boolean scoresIncreasing(int[] scores) { 
    for(int i = 0; i < scores.length-1; i++) { 
    if(scores[i] > scores[i+1]) return false; 
    } 
    return true; 
} 
+0

甜,這工作!謝謝你的提示! – Jules 2010-07-16 19:51:05