我正在尝试进行冒泡排序,这是我的代码:
import java.util.Random;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
double[] test = new double[5];
double t;
//Set random value to each of elements
for(int i = 0;i<test.length;i++){
test[i] = Math.round((100*Math.random()));
System.out.println(test[i]);
}
//Bubble Sort
for(int i = 0;i<test.length;i++){
for(int k = 0;k<test.length-1;k++){
int x = i+1;
if(test[i]>test[x]){
t = test[i];
test[i] = test[x];
test[x] = t;
}
}
}
}
}
然后我启动它,它会抛出一个错误:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
at Main.main(Main.java:24)
答案 0 :(得分:4)
i
上升到数组的长度,然后将x
设置为超过该数组!因此,您尝试访问超出数组末尾的元素。
您可以在排序代码中使用i < test.length - 1
,或者检查以确保您不尝试将最后一个元素与其后的元素交换。
答案 1 :(得分:1)
我认为,在您的内循环中,您希望使用k
代替i
。
答案 2 :(得分:0)
“i = x + 1;”这一行是你的问题。当x,你的计数器是4时,这需要i到5.当你试图获得test [5]的值时,你超出了数组的范围。