2014-01-14 273 views
0

在我的應用程序中,我有一個String類型的值列表,我遍歷它並將每個值與另一個字符串進行比較,如果它爲true,則返回true值,否則返回false。Java for循環迭代

List<String> roleNames = new ArrayList<String>(); 
roleNames.add("AAA"); 
roleNames.add("MMM"); 
for (int i=0 ; i<roleNames.size();i++){ 
// if(loggedInRole.equals(roleNames.get(i))){ 
    if("AAA".equals(roleNames.get(i))){ 
     enableLink = "true"; 
    } 
    else { 
     enableLink = "false"; 
    } 
} 

在我上面的代碼中我期待結果爲true,但在第二次迭代中,它返回結果爲false。如何解決這個問題?

+1

那麼在第二次迭代的值是「MMM」,而不是「AAA」是......真的是你完整的循環?請注意,你實際上沒有*返回任何東西... –

+0

爲什麼你沒有聲明enableLink作爲布爾值? – Will

+4

提示:代替循環'ArrayList',你可以只有'enableLink = roleNames.contains(「AAA」);' –

回答

5

當您找到匹配項時,添加break聲明。如果你沒有跳出循環,那麼當它迭代"MMM"時,下一次迭代將把enableLink設置回"false"

另外,您應該在開始循環之前將enableLink設置爲"false"。標準的「搜索陣列」循環的樣子:

enableLink = "false"; 

for (int i = 0; i < roleNames.size(); i++) { 
    if ("AAA".equals(roleNames.get(i))) { 
     enableLink = "true"; 
     break; 
    } 
} 

對於它的價值,你不需要外在的循環。你可以寫:

boolean enableLink = roleNames.contains("AAA"); 
+0

它非常簡單,非常感謝你提醒我BREAK,它工作了,謝謝你TONE – tom

5

當你發現一個值滿足你的條件時,你必須打破循環,否則enableLink將是"true",只有當你的列表的最後一個元素等於"AAA"你的情況。

你也應該看看contains方法。