循环内的数组外部索引

时间:2013-05-16 00:10:16

标签: c# arrays

我得到一个错误索引超出了数组的范围,我试着做一些简单的数学运算并将其保存在我的列表中。

        List<int> integerList = new List<int>();
        for (int a = 0; a < textBox1.Text.Length; a++)
        {
            for (int b = 8; b > 1 ; b--)
            {
                integerList.Add(int.Parse(textBox1.Text[a * b].ToString())); //this line
            }


        }
        listBox1.DataSource = integerList;

我想要实现的是,用户必须在文本框中输入一个7位数字,例如4565457,我想将此数字存储在我的i​​ntegerList中,然后从用户输入的开头开始取每个数字并且从8开始乘以,直到达到2。

For instance:

4 x 8 
5 x 7
6 x 6
5 x 5
4 x 4
5 x 3
7 x 2

然后我想存储这些乘法的总和以供以后使用。

5 个答案:

答案 0 :(得分:1)

可能是textBox1.Text超出范围。尝试在使用索引器之前添加一个检查:

if (a*b < textBox1.Length)
    integerList.Add(int.Parse(textBox1.Text[a * b].ToString())); //this line

答案 1 :(得分:1)

试试这个(因为你可能想要用b的值来计算你的数字的值):

    List<int> integerList = new List<int>();
    for (int a = 0; a < textBox1.Text.Length; a++)
    {
        for (int b = 8; b > 1 ; b--)
        {
            integerList.Add(int.Parse(textBox1.Text[a].ToString()) * b); //this line
        }


    }
    listBox1.DataSource = integerList;

答案 2 :(得分:0)

索引a * b超出了TextBox内容的范围。您必须设置安全措施,以确保不使用超出范围的索引索引文本框的字符串内容

答案 3 :(得分:0)

抱歉没时间阅读已编辑的问题。根据新的说明,如果用户输入4565457,您希望将该字符串中的每个字符从位置0乘以6的最后一个(8 - position)。循环单for循环将完成这一操作。

List<int> integerList = new List<int>();
var l = textBox1.Text.Length;
for (int a = 0, b = 8; a < l && b > 1; a++, b--)
{
    integerList.Add((Convert.ToInt16(textBox1.Text[a]) * b)); //this line
}
listBox1.DataSource = integerList;

在循环结束时,listBox1将包含以下值:

416
371
324
265
208
159
110

试试这个:

List<int> integerList = new List<int>();
var l = textBox1.Text.Length;
for (int a = 0; a < l; a++)
{
    for (int b = 8; b > 1 && (a*b) < l ; b--)
    {
        integerList.Add(int.Parse(textBox1.Text[a * b].ToString())); //this line
    }
}
listBox1.DataSource = integerList;

a * b越过文本框中的文本长度,因此添加&& (a*b) > l会使其处于控制之中。

答案 4 :(得分:0)

此行textBox1.Text[a * b]可能是问题的根源。没有边界检查,a * b可能评估为大于最终索引textBox1的整数。我没有一个很好的解决方案,因为我真的不明白你想要做什么......内部for循环中的表达式通常没有多大意义。

您可以简单地检查a * b是否小于textBox1.Text.Length以防止异常,但这可能不会使代码执行您实际想要的操作。