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)罰金の番号を受け入れます。キャッチセクションに移動するとすぐにエラーが表示されますIndex was outside the bounds of the array私が見逃している明らかなものはありますか?それともこれは私のプログラムに非常にユニークですか?

4

3 に答える 3

5

配列は1から6になると思います。0から5です。

于 2012-11-04T18:03:36.227 に答える
1

少なくとも6文字TextBoxが含まれていることを確認する必要があります。そうでない場合は、例外が発生します。

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

そして、配列のインデックスは1ではなく0から始まることを忘れないでください。

于 2012-11-04T18:11:20.683 に答える
1

入力文字列には何文字ありますs = textBox1.Text;か?ユーザー入力のチェックは実行しません。

例えば

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

次に、インデックス4/5/6を使用しようとすると、エラーが発生します。
もちろん、配列のインデックスは1ではなく0から始まることも考慮する必要があります。
上記の私の入力では、0から3までのインデックスのみがあります。

簡単なチェックは次のようになります(他の方法で数値以外のデータをすでに除外していると仮定します)

s = textBox1.Text;
if(s.Length != 6)
    MessageBox.Show("6 digits required!");
else
    .......
于 2012-11-04T18:13:26.983 に答える