1

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

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(es)罚款中的数字。一旦它移动到 catch 部分,它就会弹出一个错误Index was outside the bounds of the array我有什么明显的遗漏吗?或者这对我的程序来说是独一无二的吗?

4

3 回答 3

5

我相信你认为你的数组从 1 到 6。它从 0 到 5。

于 2012-11-04T18:03:36.227 回答
1

您应该确保您TextBox包含至少 6 个字符,否则它会给出异常:

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

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

于 2012-11-04T18:11:20.683 回答
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
    .......
于 2012-11-04T18:13:26.983 回答