0

プレーヤーがコンピューターと交代でスティックを取得する単純な Windows フォーム アプリケーションを作成する必要があります (非表示になるラベルから作成しました) が、ランタイムが発生するため、PC のコードに問題があります。エラー「インデックスが範囲外です」、そして私はそれを理解できません..

    private void pcTake(int x)
    {
        textBox1.Text = "I take " + x;
        for (int i = 0; i < labels.Count; i++)
        {
            if (labels[i].Visible == false && labels[i + 1].Visible == true)
            {
                while (x > 0)
                {
                    if (x + i > labels.Count)
                        break;
                    labels[i + x].Visible = false;
                    x--;
                }
                break;
            }
        }

    }

xは乱数、 labelsはラベルを含むリスト

foreach (Control c in this.Controls)
        {
            if (c is Label)
            {
                labels.Add(c);
                c.Enabled = true;
            }
        }

前もって感謝します

4

2 に答える 2

4

比較の例外が発生しています

labels[i + 1].Visible == true

ループは に基づいている < labels.Countため、つまり、ループ インデックスが に達すると、配列のインデックスが 0 ベースであるためcount - 1、条件は配列インデックスをチェックすることになります。例外が発生します。counti + 1

現在のインデックスとそれ以降のインデックスを確認する場合、ループ条件は次のi < labels.Count - 1ようになります。

for (int i = 0; i < labels.Count - 1; i++)
于 2013-05-08T04:50:50.530 に答える
1

C# では、配列のインデックスは 0 であるため、最後の項目は labels[labels.Count-1]; です。これを変更する必要があります

if (x + i > labels.Count)
    break;

これに

if (x + i > labels.Count -1)
    break;
于 2013-05-08T04:52:20.933 に答える