有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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]);
}

共 (2) 个答案

  1. # 1 楼答案

    正如您已经看到的,您的代码超出了数组的限制。 如果您查看代码,下面就是发生这种情况的地方

    while (i < elements.length) {
    

    这是while循环部分,因此如果您将其更改为通过正确数量的元素正确循环,您的问题将得到解决。。用这个修改你的while循环代码

    while (i < elements.length-1) {
    
  2. # 2 楼答案

    My issue is that I keep getting the ArrayIndexOutOfBoundsException error, but cannot find where this problem lies.

    问题在于for loop的条件。当i=49出现ArrayOutOfBounds异常,然后尝试访问不存在的i+1索引

    改变

    for (int i = 0; i < elements.length; i++)
    

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