我的问题是,当我输入一个超过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;
感谢。
答案 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());