2010-02-19 186 views
2

我學習Java,並使用該for語句的循環:有沒有辦法在for語句中切換變量?

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

我想每一次切換填充顏色的循環運行。我不想提供太多的例子,因爲我沒有在尋找我的具體問題的答案,但我想知道是否有辦法做到這一點?

基本上evey奇怪的時候循環運行,它x和它每運行一段時間,它y?

編輯:打字後,我想也許我可以做一個if語句與int我?像if i % 2 == 0 {} ? PS:我特此表達我的興奮。

回答

4

添加mod運算符。如果我%2 == 0,那麼爲偶數做些事情,否則爲奇數做些事情。

+1

笑,我覺得我們在同一時間被輸入:-D – Joel 2010-02-19 05:06:27

+1

我相信是這樣。 :)玩得開心編碼! – 2010-02-19 05:52:41

5
for (int i = 0; i < 3; i++) { 
    if(i % 2 == 0) { 
     //even, do Y 
    } else { 
     //odd, do X 
    } 
} 
1

我不知道該如何編譯器優化了這種說法,我知道微優化是一切罪惡的母親,但你可以使用一個布爾變量來控制自己的狀態:

boolean gray = false; 
for(...) { 
    if(gray) { 
    } else { 
    } 
    gray != gray; 
} 

在現實生活中,我可能會將它修改爲2,作爲這裏的例子,但總是有其他選擇。

+0

FWIW:微觀優化被認爲是所有邪惡的「根源」......但是,這就是說,我認爲推理普通習語並習慣使用最有可能提供最佳性能的習慣*在其他方面是等價的*是將黑客與真正優秀的程序員分開的東西。只是我的2c。 – 2010-02-20 01:46:29

+0

對於使用相對昂貴的除法,有一點需要說明......除非編譯器發現'((x%2)== 0)'(或== 1)並將其轉換爲我回答了什麼。 – 2010-02-20 01:48:21

+0

這裏有一個關於檢查一個字符串是否爲空的問題,並且所有的答案都涉及修剪字符串並檢查它的長度。前一段時間,我檢查了StringUtils.isBlank的源代碼(來自Commons-Lang),並且它們不修剪字符串,他們實際上檢查它是否從頭到尾有空格。修剪方法可能會這樣做,並返回一個新的字符串,並通過這樣做,他們將阻止創建一個新的對象。 – 2010-02-22 16:10:03

1

只是去我微優化等等拍我徽章,以及替代品的一套完整的這個問題:

for(int xa=0; xa<3; xa++) { 
    if((xa&0x1)==0) { 
     // even 
     } 
    else { 
     // odd 
     } 
    } 
+0

我真的很喜歡你的答案。從來沒有想過,但是,當然,如果最後一位是1,那很奇怪,否則它是偶數。 – 2010-02-19 20:39:46

相關問題