好的所以这里是我的代码,编译器没有显示任何错误,但每当我运行它时,我得到这个错误"线程中的异常" main"
java.lang.ArrayIndexOutOfBoundsException: 5
at BubbleSort.bubblesort(BubbleSort.java:18)
at BubbleSort.main(BubbleSort.java:8)"
----------------------------代码------------------ ---------------------------------
public class BubbleSort {
static int[] numbers = { 5, 8, 14, 1, 5678 };
public static void main(String[] args) {
BubbleSort bb= new BubbleSort();
bb.bubblesort(numbers);
bb.printArray(numbers);
}
static void bubblesort(int[] arr){
int temp;
for(int i=0;i<arr.length;i++){
for(int j=0;j<(arr.length-i);j++){
if(arr[j]>=arr[j+1]){
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
}
public void printArray(int[] arr){
for(int i:arr){
System.out.println(i);
}
}
}
答案 0 :(得分:0)
此错误表示您正在访问超出数组范围的索引。错误发生在该行:
if(arr[j]>=arr[j+1])
请注意i=0
,j
的范围从0到arr.length-1
不等。因此j + 1从1到arr.length
不等。 arr[arr.length]
抛出越界错误。
答案 1 :(得分:0)
将第二个条件改为-1:
for(int j=0;j<(arr.length-i -1);j++){
迭代的原因i = 0它会迭代到arr.length + 1(这里if(arr [j]&gt; = arr [j + 1]){)
另外(不是与bug有关,而是警告)你将bublesort定义为静态并通过实例访问。你可以改变吗?
答案 2 :(得分:0)
在外循环的第一次运行中,i = 0;因此arr.length-i = array.length = 5.在内部循环的最后一次迭代中j = 4.因此j + 1 = 5并且当您尝试引用索引为5的数组元素时,您将获得异常。