2012-03-05 72 views
2

如果Arraylist中的项目没有任何属性'slotted'设置为false,我想执行代码。我使用下面的代码:在Arraylist中计算具有特定属性的项目

int p=0; 

for (int i = 0; i < AppleList.size();i++){ 
    if (AppleList.get(i).slotted = true){ 
     p++; 
    } 

if (p == 0){ 

    //EXECUTE CODE 

} 

有什么办法可以做得更好吗?

+2

'AppleList.get(i).slotted = true'应该是'AppleList.get(i) .slotted == true'或甚至更好'AppleList.get(i).slotted' – 2012-03-05 18:48:25

+0

by“better”你的意思是更有效/更快?你可以使用一个循环作为替代;) – 2012-03-05 18:49:57

+0

另外,使用比索引更快的迭代器。 – dhaag23 2012-03-05 18:51:40

回答

5

您可以用做增强的for循环和一个标签:

label: 
{ 
    for(Foo f : AppleList) if(!f.slotted) break label; 

    // Here you guaranteed that all slotted fields are true 
} 
+1

不需要布尔变量的创意解决方案。 – phlogratos 2012-03-05 19:07:58

+1

+1了解问题 – paislee 2012-03-05 19:15:24

+1

这看起来不错,干净整洁!我希望在本周末检查一下,如果有效,它将设置有效的答案!日Thnx! – 2012-03-08 15:54:48

2
for (int i = 0; i < AppleList.size() && !AppleList.get(i).slotted; i++) { 
} 

if (i == AppleList.size()) { 
    //EXECUTE CODE 
} 

boolean foundNonSlotted = false; 
for (int i = 0; i < AppleList.size(); i++) { 
    if (!AppleList.get(i).slotted) { 
    foundNonSlotted = true; 
    break; 
    } 
} 

if (foundNonSlotted) { 
    //EXECUTE CODE 
} 
+0

这将执行代码,如果至少有一个元素是开槽的,但它们必须被开槽:“执行代码,如果Arraylist中没有任何项目的属性'开槽'设置为false”。 – paislee 2012-03-05 19:07:38

+0

你是对的,修正样品 – 2012-03-05 19:21:48

3

有代码中的几个误区。首先缺少},并且第二:

AppleList.get(i).slotted = true 
//      ^should be == 

关于你的问题:

执行代码,如果在ArrayList中的项目都没有属性“档期”设置为false。

或者,全部元件必须开槽。因此,如果任何元素有slotted设置为false,不执行代码:

boolean allSloted = true; 

// VVVVV or appropriate type 
for (Apple a : AppleList) { 
    if (!a.slotted) { 
     allSloted = false; 
     break; 
    } 
} 

if (allSloted) { 
    // EXECUTE CODE 
} 
+0

@downvoter请解释 – paislee 2012-03-06 17:49:28

1

如果我在那里你我会做这样的

boolean flag=true; 

for (int i = 0; i < AppleList.size();i++){ 
    if (!AppleList.get(i).slotted){ 
     flag = false; 
     break; 
    } 
    } 
if (flag){ 
    //EXECUTE CODE 
} 

这可能在性能上不同,因为大(O)可以是相同的(1)“我意思是如果在第一项rraylist等于true,那么你需要做你的代码,你不必完成循环等于arraylist大小“

+0

“如果Arraylist中的项目没有任何属性'slotted'设置为false,我想要执行代码 - 这意味着它们必须全部被开槽,而不仅仅是一个。 – paislee 2012-03-05 19:10:33

+0

而不是AppleList.get(i).slotted == true写下它AppleList.get(i).slotted == false;只是了解我的思维方式。如果你的条件在开始时失败,你不必完成整个数组的大小。 – 2012-03-06 09:05:19

+0

您需要反转您的代码执行条件。目前你执行,如果你发现一个无插槽,但OP说只有执行代码,如果所有开槽。 – paislee 2012-03-06 16:50:19