0

ループ内に if ステートメントがあります。ループDebug.Write()の最初の反復ではすべてが期待どおりに機能すると判断しましたが、後続の反復では if ブロックは無視されますが、ループ内の他のすべては実行されます。いくつかのバリエーションを試しましたが、これまでのところどれも機能していません。

もともと私は持っていました:

Private int Loop()
{
    int a = 50000;
    int n = 0;
    for (int n = 0; n < arrayListFromElsewhere.Count(); n++)
    {
        if ((int)arrayListFromElsewhere[n] < a)
        {
            Debug.WriteLine("if loop: " + n);
            a = n;
        }
        Debug.WriteLine("N: " + n);
    }
}

どちらが印刷されますか:

if loop: 0
N: 0
N: 1
N: 2
etc...

ArrayList に整数のみが含まれていることを確認し、for を while に置き換え、if を for/while 内で呼び出される別の関数に移動しようとしましたが、これまでのところ何も機能していません。それで、私が見落としていた非常に明白なことは何ですか?

4

5 に答える 5

8

ループの最初の繰り返しの後、に設定aしましたn。それ以降は、 の値が負の場合にのみifステートメントに入ります。負の値がありますか? (ちなみに、失敗の短いが完全な例は、あなたがやろうとしていることの説明と同様に、本当に役に立ちました。)ArrayList

(余談ですが、なぜまだ非ジェネリック コレクションを使用しているのですか? 2004 が呼び出し中です。コードを元に戻したいのです!)

于 2012-04-15T19:34:02.647 に答える
2

最初はループ a = n ですが、n はゼロなので、if が 2 回目に評価されると、n =1 a = 0 arrayListFromElsewhere[n] = something > 0 になります。

于 2012-04-15T19:34:28.537 に答える
1

最初の反復aでは 0 (n最初の実行時の の値) になります。

その後、if ステートメントif ((int)arrayListFromElsewhere[n] < a)は常に false になります。

于 2012-04-15T19:34:55.817 に答える
0

はい、if block指定した条件に基づいて無視されます。最初の if ブロックでは、 を設定していますa = n。その場合a will be 0。したがって、後続の if ブロックは false になり、実行されません。

于 2012-04-15T19:35:19.983 に答える
0

配列に正の数しかない場合、最初の反復の後、a は 0 になり (if の最初の n は 0)、それ以上 if に入りません。

また、n が 2 回宣言されています。

于 2012-04-15T19:36:52.080 に答える