2012-03-05 76 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