索引超出了数组的范围 - 整数

时间:2012-11-04 18:01:38

标签: c# arrays winforms indexing

我遇到了一个常见的问题,但我不确定为什么会发生这种情况。

string s;
int c1, c2, c3, c4;    

private void button2_Click(object sender, EventArgs e)
{
    String number;
    s = textBox1.Text;
    int[] d = s.Select(c => (int)c - (int)'0').ToArray();

    try
    {
        c1 = (4 * d[1] + 10 * d[2] + 9 * d[3] + 2 * d[4] + d[5] + 7 * d[6]) % 11;
        c2 = (7 * d[1] + 8 * d[2] + 7 * d[3] + d[4] + 9 * d[5] + 6 * d[6]) % 11;
        c3 = (9 * d[1] + d[2] + 7 * d[3] + 8 * d[4] + 7 * d[5] + 7 * d[6]) % 11;
        c4 = (d[1] + 2 * d[2] + 9 * d[3] + 10 * d[4] + 4 * d[5] + d[6]) % 11;
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }

    number = d[1]+d[2]+d[3]+d[4]+d[5]+d[6]+c1+c2+c3+c4.ToString();
    textBox2.Text = number;    
}

它会接受第一个TextBox(秒)中的数字。一旦它移动到捕获部分,它将弹出一个错误Index was outside the bounds of the array是否有一些明显的东西我不见了?或者这对我的计划来说是非常独特的吗?

3 个答案:

答案 0 :(得分:5)

我相信你认为你的阵列从1到6。 从0到5。

答案 1 :(得分:1)

您应该确保TextBox包含至少6个字符,否则它会例外:

if(textBox1.Text.Length >= 6)
{
   //your code here
}
else
   MessageBox.Show("You must insert at least 6 characters");

然后记住数组的索引从0开始而不是1

答案 2 :(得分:1)

输入字符串s = textBox1.Text;中有多少个字符? 您不会对用户输入执行任何检查。

例如

textBox1.Text = "1234"; // only 4 digits

然后,当您尝试使用索引4/5/6时,您会收到错误 当然,您还应该考虑数组索引从零开始而不是一个 在我上面的输入中,您将只有0到3的索引。

应该进行简单检查(假设您已经通过其他方式排除了非数字数据)

s = textBox1.Text;
if(s.Length != 6)
    MessageBox.Show("6 digits required!");
else
    .......