我的代码总是抛出异常错误

时间:2014-06-22 09:25:23

标签: c#

我的问题是,当我输入一个超过7的值时,它总是抛出异常索引超出范围:必须是非负数或小于集合的大小。参数名称:索引。这是我的代码

List<int> sample = new List<int>();
DataTable dataHolder = new DataTable();
int counter;
int secondCounter;
public Form1()
{
    InitializeComponent();
    Random rnd = new Random();
    for (int i = 0; i <= 100; i++)
    {
        sample.Add(rnd.Next(90, 100));
    }
    dataHolder.Columns.Add("Random Number", typeof(string));
    dataHolder.Columns.Add("Average", typeof(string));
    counter = 0;
    secondCounter = 0;
}

private void button1_Click(object sender, EventArgs e)
{
    List<int> collectionHOlder = new List<int>();

    for (int a = 0; a < 96; a++)
    {
        //if (a != sample.Count)
            for (int i = a; i <= Convert.ToInt32(textBox1.Text) - 1 + a; i++)
            {
                counter++;
                secondCounter++;
                if (i <= 96)
                {
                    collectionHOlder.Add(sample[i]);

                }

                if (secondCounter < Convert.ToInt32(textBox1.Text))
                {
                    dataHolder.Rows.Add(sample[i].ToString(), "");

                }
                if (counter == Convert.ToInt32(textBox1.Text))
                {
                    dataHolder.Rows.Add(sample[i].ToString(), collectionHOlder.Average());
                }

            }
        counter = 0;
        collectionHOlder.Clear();
    }
    dataGridView1.DataSource = dataHolder;

感谢。

2 个答案:

答案 0 :(得分:4)

for (int a = 0; a < 96; a++)
{   
   for (int i = a; i <= Convert.ToInt32(textBox1.Text) - 1 + a; i++)

当输入为7且a达到95时,这变为7 - 1 + 95 = 101.

以前,

  for (int i = 0; i <= 100; i++)
  {
     sample.Add(rnd.Next(90, 100));
  }

创建了一个包含101个元素的数组,有效位置0..100

所以是的,当{i> = 101时,sample[i]会抛出该异常。


作为一般建议,请以较小的步骤破坏此代码并使用有意义的名称。使调试,查找和修复错误变得更容易。

答案 1 :(得分:0)

感谢您的所有答案。我现在完成这个问题这是我的解决方案

                **if(i < sample.Count - 1)**
                if (counter == Convert.ToInt32(textBox1.Text))
                    dataHolder.Rows.Add(sample[i].ToString(), collectionHOlder.Average());