indexOutofRange Bubble使用输入框时排序

本文关键字:排序 输入 Bubble indexOutofRange | 更新日期: 2024-10-22 22:30:33

它一直困扰着我几个小时,因为它总是在数字[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]);
}

indexOutofRange Bubble使用输入框时排序

 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;
}

strong文本

这是我作为一个Windows窗体使用的,输出在列表框中显示为每个数组项或数组上的单个I迭代。当然没有错误检查。希望能有所帮助。

抛开处理文本框的奇怪方式不谈,即使没有它们,抛出异常的问题也会发生,因为它就在这里,在你的内部循环中:

for (i = 0; i <= j - 1; i++)

假设CCD_ 1。这意味着CCD_ 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.Length == 20,从而抛出一个IndexOutOfRangeException

编辑:回来后,我意识到我遗漏了解决方案(无论如何都是例外)。要使冒泡排序工作,内部循环的边界条件应该是i <= j - 2,因为j的初始值是== numbers.Length,它不是基于零的,而数组索引是。

第二次编辑:请注意,仅仅使用列表实际上并不能解决这个问题。您必须使用正确的边界条件。尝试访问list[list.Count()]将抛出一个ArgumentOutOfRangeException。列表将动态调整大小并不意味着它将以某种方式允许您访问不存在的项目。无论使用什么数据结构,都应该花时间检查边界条件。