0

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

        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,我想将此数字存储在我的 integerList 中,然后从用户输入的开头开始取每个数字并乘以从 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

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

4

5 回答 5

1

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

    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;
于 2013-05-16T00:14:49.457 回答
1

这大概textBox1.Text就是越界了吧。在使用索引器之前尝试添加检查:

if (a*b < textBox1.Length)
    integerList.Add(int.Parse(textBox1.Text[a * b].ToString())); //this line
于 2013-05-16T00:13:45.810 回答
0

索引 a*b 超出了 TextBox 内容的范围。您必须采取保护措施,以确保您不会使用超出范围的索引来索引文本框的字符串内容

于 2013-05-16T00:14:15.733 回答
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将保持控制。

于 2013-05-16T00:14:31.860 回答
0

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

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

于 2013-05-16T00:14:55.290 回答