【问题标题】:java bubble sort if statement out of bounds [duplicate]java冒泡排序if语句越界[重复]
【发布时间】:2019-12-18 09:38:16
【问题描述】:

我在运行冒泡排序时遇到问题,它没有显示任何语法错误,并且每当我运行它时,它都会在第 13 行显示 java.lang.ArrayIndexOutOfBoundsException,这是 if 语句,

import java.util.*;

公共类 Array3 {

public static void main(String[] args) {


    int[] numbers = {1, 5, 2, 6, 3, 8, 9, 4, 7};
    int temp = 0;       


    for(int i = 0 ; i <= numbers.length - 1 ; i++) {                        
        for (int j = 0 ; j <= numbers.length - 1 - i; j++) {
            if(numbers[j] > numbers[j + 1]) { //error is in this line
                temp = numbers[j];
                numbers[j] = numbers[j + 1];
                numbers[j + 1] = temp;
            }
        }
    }
    for(int i = 0 ; i <= numbers.length ; i++) {
        System.out.print(numbers + ", ");
    }
}

}

【问题讨论】:

标签: java arrays sorting if-statement


【解决方案1】:

在第一个和第二个for循环中删除等号运算符或从长度中删除-1。

public class Array3 {

public static void main(String[] args) {


    int[] numbers = {1, 5, 2, 6, 3, 8, 9, 4, 7};
    int temp = 0;       

    //Remove the equal operator in first for loop   
    for(int i = 0 ; i < numbers.length - 1 ; i++) {  
     //Remove the equal operator in second for loop                      
        for (int j = 0 ; j < numbers.length - 1 - i; j++) {
            if(numbers[j] > numbers[j + 1]) { //error is in this line
                temp = numbers[j];
                numbers[j] = numbers[j + 1];
                numbers[j + 1] = temp;
            }
        }
    }
   // you should use number[i],and remove '=' operator or use -1 here.
    for(int i = 0 ; i < numbers.length ; i++) {
        System.out.print(numbers[i] + ", ");
    }
}
}

【讨论】:

  • 谢谢它删除了越界错误,但它显示了输出 [I@15db9742, [I@15db9742, [I@15db9742, [I@15db9742, [I@15db9742, [I@15db9742 , [I@15db9742, [I@15db9742, [I@15db9742,
  • 这是因为您正在打印机中打印整个数组(数字) for loop 。请检查打印循环。您需要删除 for 循环中的 '=' 运算符并放入数字[i]。
  • 我已经编译了我的答案,它工作正常,示例输出:- 1、2、3、4、5、6、7、8、9。@KyleAtienza
  • 不好意思我没有改下面的打印方式,非常感谢gme的帮助
【解决方案2】:

这行意味着你遍历你的表。 j 值可以是表的最后一个索引,因为numbers.length - 1 指的是最后一行(记住表索引从 0 开始)。

for (int j = 0 ; j <= numbers.length - 1 - i; j++)

当您执行numbers[j + 1] 时,如果j 值在表格的最后一个索引中,j + 1 将引用表格的 out 行,该行抛出java.lang.ArrayIndexOutOfBoundsException

将循环条件从 j &lt;= numbers.length -1 -i 更改为 j &lt; numbers.length -1 -i 将解决您的问题。

【讨论】:

  • 谢谢它删除了越界错误,但它显示了输出 [I@15db9742, [I@15db9742, [I@15db9742, [I@15db9742, [I@15db9742, [I@15db9742 , [I@15db9742, [I@15db9742, [I@15db9742,
  • 在System.out.print(numbers + ", ")中,numbers指的是数组地址([I@15db9742)。您应该添加索引: numbers[i]
  • 非常感谢您帮助我在编程方面相对较新,这样的错误有时对我来说并不明显
猜你喜欢
  • 2014-06-03
  • 1970-01-01
  • 2014-10-04
  • 2021-03-24
  • 1970-01-01
  • 2021-05-14
  • 1970-01-01
  • 2014-06-25
  • 2017-06-17
相关资源
最近更新 更多