[英]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.