java尝试使用气泡排序将随机整数数组从最大到最小排序
作为一项任务的一部分,我被要求创建一个随机值在一定范围内的数组,然后从最小值到最大值进行排序(我使用了冒泡排序),然后首先打印数组中所有元素的总和,然后从最小值到最大值列出它们
我的问题是,我一直在获取ArrayIndexOutOfBoundsException错误,但找不到问题所在
你可以在我放在randomArrays方法中的代码中看到,一个for循环为我在main方法中声明的数组大小创建随机值,然后,在for循环下面,我创建了一个if语句,检查元素的值是否大于后面的元素,如果大于,则交换元素的位置,直到它们被分成从最小到最大的顺序,循环终止
非常感谢您的帮助,谢谢:)
public class MyArray {
public static void main(String[] args) {
int[] elements = new int[50];
int min = 0;
int max = 50;
randomArrays(elements, max, min);
}
public static void randomArrays(int[] elements, int max, int min) {
int range = max - min; //defines the range of the integers
int temp;
boolean fixed = false;
while (fixed == false) {
fixed = true;
for (int i = 0; i < elements.length; i++) {
elements[i] = min + (int) (Math.random() * range);
while (i < elements.length) {
if (elements[i] > elements[i + 1]) {
//if 8 > 5
temp = elements[i + 1];
//store 5 in temp
elements[i + 1] = elements[i];
//put the 8 in the 5's place
elements[i] = temp;
fixed = false;
}
i++;
}
}
}
}
//System.out.println(elements[i]);
}
# 1 楼答案
正如您已经看到的,您的代码超出了数组的限制。 如果您查看代码,下面就是发生这种情况的地方
这是while循环部分,因此如果您将其更改为通过正确数量的元素正确循环,您的问题将得到解决。。用这个修改你的while循环代码
# 2 楼答案
问题在于
for loop
的条件。当i=49
出现ArrayOutOfBounds
异常,然后尝试访问不存在的i+1
索引改变
到