我的程序允许用户将小时和分钟的值输入到预定义长度的数组中。 我希望这个名为add的按钮用于创建一个表单,以允许用户输入多个输入,直到阵列完全居住。然后,当它完成时,调用sortArray()方法它们现在它只允许一个输入然后抛出异常。我该怎么做?
private void addButton_Click(object sender, EventArgs e)
{
int index = 0;
try
{
while (index <= array.Length)
{
minutes = Int32.Parse(minutesTextBox.Text);
hours = Int32.Parse(hoursTextBox.Text);
MessageBox.Show("You have successfully entered a time!");
array[index] = new RandomClass.Time(hours, minutes);
index = index + 1;
}
}
catch (Exception ex)
{
MessageBox.Show(ex.GetType().FullName);
MessageBox.Show("Please only input integer numbers. Start again from the beginning");
hoursTextBox.Text = null;
minutesTextBox.Text = null;
array = null;
arrayLength = null;
}
MessageBox.Show("Please choose what order you want arrange the sort!");
FileA.RandomClass.sortArray(array);
}
答案 0 :(得分:1)
你没有显示数组的大小,但是这一行:
while (index <= array.Length)
到达数组末尾时,会导致问题,因为数组的索引从零到小于数组的长度。
因此您需要将此行更改为:
while (index < array.Length)
像这样循环可能更安全:
foreach (ver element in array)
{
// do stuff
element = new RandomClass.Time(hours, minutes);
}
这样就无法循环到数组的末尾。
答案 1 :(得分:1)
不要使用此行。您将获得IndexOutOfRangeException异常,其中index将等于数组长度。
while (index <= array.Length)
你应该这样使用。
while (index < array.Length)
还有一个,您可以使用int.TryParse
来删除异常ID文本为null或emptry。
答案 2 :(得分:1)
我的答案基于这样的假设:必须为每小时和分钟的新值点击添加按钮。
目前,我在您的代码中看到了以下问题
int index = 0;
每次单击添加按钮时,您都将索引设置为零,因为每次单击添加按钮时都会覆盖此数组值。在代码中更合适的位置初始化索引。
while(index&lt; = array.Length)
假设数组长度为5,索引值为5,那么这一行将导致错误,因为数组在c#中被归零为
minutes = Int32.Parse(minutesTextBox.Text);
Int32.Parse方法返回一个bool,表示转换是否成功。使用int32.Parse的更合适的方法是
Int32.Parse(minutesTextBox.Text, out minutes);
现在,由于每个添加按钮添加了新值,因此您可以将while更改为if和else。即,
if(index < array.Length)
//Parse, add to array and increment the index
else
//Reset index (if required) and Call the sortArray() method.