2014-01-14 222 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方法。