我得到一个错误索引超出了数组的范围,我试着做一些简单的数学运算并将其保存在我的列表中。
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
然后我想存储这些乘法的总和以供以后使用。
答案 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
以防止异常,但这可能不会使代码执行您实际想要的操作。