簡體   English   中英

變量未在for循環中初始化

[英]Variable not initialized in for loop

所以當我遇到這個問題時,我一直在CodingBat網站上練習我的Java編程技巧。 在它中,你必須創建一個簡單的方法,它接受一個動態長度的整數數組,檢查數組中的元素是否按遞增順序(1,2,3,15678等),並返回“true” “如果為真,或者如果有無序的整數則為”假“。

首先,我初始化一個名為“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;
}

首先,i <i + 1將始終為真,除非i = 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;
}

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

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

作為簡化代碼(並處理0個元素的數組!)的建議,您可能希望將result初始化為true 然后,當您遍歷數組時,將result更改為false當且僅當您發現元素亂序時。

另一個警告的話。 您在for循環中使用元素i + 1 想想當你得到數組中的最后一個元素時會發生什么( i == scores.length - 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個元素怎么辦? ]

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

在return語句之前添加另一個括號(關閉for循環)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM