2013-07-14 187 views
-1

我有2個循環這樣聲明2個變量在for()循環

goodexpressions和badexpressions是字符串數組

for(int i =0; i < goodexpressions.length; i++) {} 

&

for(int j =0; j < badexpressions.length; j++) {} 

我試圖同時聲明這些在一個循環中,我得到了這個目前爲止,但它不正確

for(int b = 0 , c = 0; b < goodexpressions.length; b++ c < badexpressions.length; c++) 

我應該怎麼做才能糾正這種說法?

+8

你爲什麼要這麼做?它使代碼很難閱讀,這從來不是一件好事。 –

+0

計算數組中的字符串數量。 –

+0

它們都是'String []'嗎? – NINCOMPOOP

回答

2

雖然你試圖做的似乎是一個壞主意,但這是一段可以工作的代碼。我不知道它是否完全符合你的要求,因爲這並不完全清楚。

for(int b = 0, c = 0; b < goodexpressions.length || c < badexpressions.length; b++, c++) { } 

如果這樣做,不過,你還是要檢查是否bc是數組的索引範圍之內。您也可以用&&來代替||,在這種情況下,您不必再這樣做,但是如果陣列長度不等,您將會丟失一些項目。

+0

而不是我自己合併goodexpressions和badexpressions(新字符串[]和複製粘貼字符串在2提到的ararys),並使用該數組。我想使用apache庫的數組組合器,但這會導入不必要的數據,我在android上編碼,而且手機的資源有限。謝謝你的好回答。 –

+1

@joedacoolguy「導入不必要的數據」 - 嗯? 「手機資源有限」 - 不是那麼有限。我不會加載Spring,但實用程序庫永遠不會殺死任何人。賠率是你的圖形資產將佔用更多的空間。 – millimoose

1

根據您想要達到的目標,您應該執行以下操作之一。假設你有兩個列表AB ...

如果要遍歷兩個列表中的所有元素AB,創建一個新的列表或數組,同時持有列出超過該列表中的元素和環。

for (int i = 0; i < combinedAandB.length; i++) { 
    ... 
} 

如果你想遍歷所有從列表A和列表B元素的組合,你必須使用嵌套循環。

for (int i = 0; i < A.length; i++) { 
    for (int k = 0; k < B.length; k++) { 
     ... 
    } 
} 

更新:關於你的問題,這兩個變量的for循環的方式對其他兩個答案:請注意,由於這兩個變量將在完全相同的值在每次循環,你可以也只使用一個變量:

for (int i = 0; i < goodexpressions.length || i < badexpressions.length; i++) { } 

還要注意,這不會給你帶來任何好避免代碼重複的方面,因爲你還是要一切兩者goodexpressions[i]badexpressions[i]。一種更好的方法可能是編寫一個持有該循環的方法,並使用goodexpressions和一次badexpressions調用該方法一次。

1

我認爲這會做你問:

for (int b = 0, c = 0; 
    b < goodexpressions.length && c < badexpressions.length; 
    b++, c++) 

注意,恰好有一個古老的風格for環2個分號分隔符。

並根據您的意見,我認爲這可能會更好:

for (int i = 0; i < Math.min(goodexpressions.length, badexpressions.length); i++) 

注:

  1. 這是不完全清楚什麼循環體是要幹什麼。這將決定合併這些循環的正確方法......或者如果根本就不把它們組合起來,那就是一個壞主意。

  2. 上述代碼旨在停止兩個長度中的較小者。如果您想停在更大的位置,請將&&更改爲||minmax。但是,如果你這樣做,你還需要小心避免數組邊界異常。除非同時使用goodexpression[i]badexpression[i](例如比較它們,合併它們等等),否則如果使用兩個單獨的循環,代碼將更具可讀性和更高效。除非同時使用goodexpression[i]badexpression[i]

  3. 另一種可能性可能是簡單地檢查兩個數組的長度是否相同。

+0

你是對的第一。第二,目前還不清楚OP想要什麼。我的假設是他想在那一刻停下來。但是,如果沒有,我的代碼可以適應。 –

+0

我刪除了downvote,但任何閱讀此答案的人都應該記住,如果數組長度不相同,則不會測試某些元素。 – NullUserException

+0

很明顯,將'&&'變爲'||'而將'min'變爲'max'會導致在較小陣列上出現索引越界異常。底線是,以這種方式「組合」兩個陣列不是一個好主意。 – NullUserException