简体   繁体   中英

Trying to sort an array of randomized integers from biggest to smallest using a bubble sort

So as part of a task, I was asked to create an array with randomized values within a range, and then to sort it from smallest to biggest (I used a bubble sort), and then to firstly, print the sum of all the elements in the array, then to list them from smallest to biggest.

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

You can see in the code that I've put in the randomArrays method, a for loop that creates the random values for the array size I declared in the main method, then, underneath the for loop, I've created an if statement that checks to see if an element's value is bigger than the element after it, if it is, it swaps the place of the elements, until they're all sorted into smallest to biggest, and the loop is terminated.

Any help is much appreciated, thank you :)

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

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

Problem lies in the condition of the for loop . You get ArrayOutOfBounds exception when i=49 and then you try to access i+1 index which doesn't exists.

Change

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

to

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

As you can already see that your code is going out of the arrays limit. if you look at your code, following is where this is happening

while (i < elements.length) {

Its this while loop part, so if you change it to correctly loop thru the right number of elements, your problem will be resolved..change your while loop code with this one

while (i < elements.length-1) {

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM