2011-01-21 149 views
3

只要好奇它是否可能。 考慮follwing代碼:只在循環中運行if語句

boolean firstRow = true; 

while{row = result.next()) 
{ 
    if(firstRow) 
    { 
     firstRow = false; 
     //do some setup 
    } 

    //do stuff 
} 

它的僞代碼和問題一般不是某些特定的編程語言。

我的問題:是否可以編寫完全相同的代碼,但不使用其他變量(本例中爲「firstRow」)。在FOR循環中,可以檢查計數器變量值,但讓FOR循環出這個問題。

回答

4

是的,在開始循環之前進行設置並將其更改爲do..while。例如:

if (row = result.next()) { 
    //do some setup 
    do { 
    //do stuff 
    } while (row = result.next()); 
} 
+0

如果可能,我想在循環內做到這一點。 – Keios 2011-01-21 13:49:21

0
if(row = result.next()) 
{ 
    //do some setup 
    while(row) 
    { 
     //do stuff 
     row = result.next(); 
    } 
} 
0

嗯,有一些選擇。首先是將「設置」代碼移到循環外部。如果你不關心這會導致設置發生,即使你永遠不會迭代,這可能是最好的選擇。如果你關心,你可以添加循環條件到if檢查。

if(row = result.next()) 
{ 
    //do some setup 
} 
for (;row;row=result.next()) 
{ 
    //do stuff 
} 

另一種方法是讓循環儘可能簡單,並相信編譯器的優化器會執行上述「展開」操作。如果您將優化選項設置得足夠高,它可能會。