我遇到了一个常见的问题,但我不确定为什么会发生这种情况。
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
是否有一些明显的东西我不见了?或者这对我的计划来说是非常独特的吗?
答案 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
.......