【问题标题】:ArrayIndexOutOfBound exception In Bubble Sort [duplicate]冒泡排序中的ArrayIndexOutOfBound异常[重复]
【发布时间】:2017-06-22 19:05:27
【问题描述】:

当下面的方法运行时,它会在第 179 行抛出一个ArrayIndexOutOfBoundsException,这是嵌套循环中的if 语句。

我认为这与j-1 的索引有关。所以我把 -1 拿出来,只在括号里加上j,但它在交换的第一行抛出了同样的异常。我一直在寻找冒泡排序语法,据我所知,我很好。我很接近,我知道。有什么建议可以解决这个问题吗?

public static void bubbleSort(int[]array1){
    int temp = 0;

    for(int i = 0; i < array1.length; i++){
        for(int j = 0; j < (array1.length - i); j++){
            if(array1[j-1] > array1[j]){
                //swap
                temp = array1[j-1];
                array1[j-1] = array1[j];
                array1[j] = temp;
            }
        }
    }
}

【问题讨论】:

  • 您从索引 0 开始,因此您的 j-1 位于数组开头之前。尝试从 1 点开始。
  • 循环中的第一次迭代......当 j==0 时,array1[j-1] 正在爆炸
  • j0 时会发生什么? array1[j-1]呢?
  • 如果您查看another answer of how this was done,您会发现如果您从j=0 开始,您将在第一个循环中超出范围(0-1 = -1)。尝试将其设置为 1,看看效果如何!

标签: java indexoutofboundsexception bubble-sort


【解决方案1】:

您收到此错误的唯一问题是j = 0 的情况,因为当时j-1 = -1。这不是 java 中的有效索引值,因此 arrayIndexOutOfBounds 异常。我已经对代码进行了必要的更改。看看下面的 sn-p。

public static void bubbleSort(int[]array1){

            int temp = 0;
                for(int i = 0; i < array1.length; i++){
                    for(int j = 0; j < (array1.length - i-1); j++){
                        if(array1[j] > array1[j+1]){
                            //sawp
                            temp = array1[j];
                            array1[j] = array1[j+1];
                            array1[j+1] = temp;

【讨论】:

    【解决方案2】:

    数组的第一个元素是 0。使用 j-1 你得到 -1,这不在数组的范围内。

    您试图只输入“j”。但是,我认为您将“j+1”进行比较。并且因为“j+1”而抛出了arrayIndexOutOfBounds异常。

    尝试在第二个循环中使用它:

    (array1.length - i - 1)
    

    【讨论】:

    • 啊,当然。在第一个循环中,我输入了 j = 1,它起作用了。感谢您了解这一点。
    【解决方案3】:

    您收到此异常是因为您已启动 j=0 并执行 j-1。在这种情况下,它会越界,因此会出现异常。下面的代码可以正常工作。

    public static void bubbleSort(int[] array1){
    
                int temp = 0;
                    for(int i = 0; i < array1.length; i++){
                        for(int j = 1; j < array1.length-i; j++){
                            if(array1[j-1] > array1[j]){
                                //sawp
                                temp = array1[j-1];
                                array1[j-1] = array1[j];
                                array1[j] = temp;
                            }
                   }
               }
    

    【讨论】:

      【解决方案4】:

      对于内循环的第一次迭代,当 j=0 时,j-1 变为 -1,并且 arr[-1] 是索引超出范围异常。 现在当您在 if 条件下将 j-1 更改为 j 时

      if(array1[j-1] > array1[j]) // j-1 到 j

      仍然在第一行交换 arr[j-1] 是 arr[-1],它会抛出 index out of bound 异常。

      请遵循以下代码以避免索引超出范围异常。 从 1 开始 j 的迭代。

      `public static void bubbleSort(int[]array1){
          int temp = 0;
          for(int i = 0; i < array1.length; i++){
              for(int j = 1; j < (array1.length - i); j++){ //initialize j=1 instead 0
                  if(array1[j-1] > array1[j]){
                      //sawp
                      temp = array1[j-1];
                      array1[j-1] = array1[j];
                      array1[j] = temp;
                  }
              }
          }
      }`
      

      【讨论】:

        猜你喜欢
        • 2017-07-04
        • 2018-07-10
        • 2023-03-15
        • 2021-03-24
        • 1970-01-01
        • 2023-01-14
        • 2021-04-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多