2011-01-21 6 views
3

可能であれば興味があります。 コードをfollwing考えてみましょう:ループでif文を1回だけ実行する

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

+1

追跡する別の変数がなければ、私はそれが可能だとは思わない。あなたは状態を区別するための何らかの方法が必要です。データについて何も知らずに、変数(ブール値、カウンタなど)がそれを行う唯一の方法でしょう。あなたが「もの」から「セットアップ」を区別したとすれば、それは私には明らかではありません**なぜあなたはそのようにしたいのですか? – kvista

+5

@Keios:実用的な理由はありますか? "私は*このようにするのが好きです"という単純な解決策を拒否することは有効な議論ではありません。 – delnan

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 
} 

もう1つは、ループをできるだけ単純にし、コンパイラのオプティマイザが上記の「アンローリング」を行うことを信頼することです。最適化オプションを十分に高く設定しておくと、おそらくそうなります。

関連する問題