它一直困扰我几个小时,因为它总是在数字[i]返回0而我无法弄清楚问题。代码适用于不同的程序,但我必须更改它,以便它可以有一个自定义数组大小,那就是一切都出错了。 任何帮助都会很棒。 提前谢谢。
int[] numbers = new int[Convert.ToInt16(TxtArray.Text)];
int j = 0;
for (j = numbers.Length; j >= 0; j--)
{
int i = 0;
for (i = 0; i <= j - 1; i++)
{
string NumbersInput = Microsoft.VisualBasic.Interaction.InputBox("Enter Numbers to be sorted",
"Numbers Input", "", -1, -1);
numbers[i] = Convert.ToInt16(NumbersInput);
//returns 0 in if statement
if (numbers[i] < numbers[i + 1])
{
int intTemp = 0;
intTemp = numbers[i];
numbers[i] = numbers[i + 1];
numbers[i + 1] = intTemp;
}
}
}
for (int i = 0; i < numbers.Length; i++)
{
LstNumbers.Items.Add(numbers[i]);
}
答案 0 :(得分:0)
撇开你如何使用文本框的陌生感,即使没有它们也会发生抛出异常的问题,因为它位于你的内环中:
for (i = 0; i <= j - 1; i++)
假设numbers.Length == 2
。这意味着j == 2
。所以在第一次通过外循环时,你会遇到这些条件的内循环。第一次通过i == 0
。你到了if语句:
if (numbers[i] < numbers[i + 1])
numbers[0]
存在,并且numbers[1]
存在,因此此迭代会很好,i
会递增。
现在i == 1
。现在循环检查其边界条件。 i <= j - 1 == true
,所以循环继续。现在当你点击那个if语句时,它会尝试访问numbers[i + 1]
,即不存在的numbers[2]
,抛出IndexOutOfRangeException
。
编辑:回过头来意识到我遗漏了解决方案(无论如何都是例外)。要使冒泡排序起作用,您的内循环边界条件应为i <= j - 2
,因为j
的初始值为== numbers.Length
,这不是从零开始的,而数组索引是。
第二次修改:请注意,使用列表的只是实际上无法解决此问题。您必须使用正确的边界条件。尝试访问list[list.Count()]
会抛出ArgumentOutOfRangeException
。仅仅因为List会动态调整大小并不意味着它会以某种方式让您访问不存在的项目。无论您使用何种数据结构,都应该花时间检查边界条件。
答案 1 :(得分:0)
private void button1_Click(object sender, EventArgs e)
{
int sizeOfArrayInt = Convert.ToInt32(arraySize.Text);
int[] array = new int[sizeOfArrayInt];
string numbers = arrayValues.Text;
string[] numbersSplit = numbers.Split(',');
int count = 0;
foreach (string character in numbersSplit)
{
int value;
bool parse = Int32.TryParse(character, out value);
if (value != null)
{
array[count] = value;
}
count++;
}
array = this.SortArray(array);
foreach (int item in array)
{
this.listBox.Items.Add(item);
}
}
private int[] SortArray(int[] arrayToSort)
{
//int[] sortedArray = new int[arrayToSort.Length];
int count = arrayToSort.Length;
for (int j = count; j >= 0; j--)
{
int i = 0;
for (i = 0; i <= j - 2; i++)
{
if (arrayToSort[i] < arrayToSort[i + 1])
{
int intTemp = 0;
intTemp = arrayToSort[i];
arrayToSort[i] = arrayToSort[i + 1];
arrayToSort[i + 1] = intTemp;
}
}
}
return arrayToSort;
}
强文
这我作为Windows窗体工作,输出显示在列表框中,作为每个数组项或个体迭代数组。当然没有错误检查。希望有所帮助。