首页 > 解决方案 > 尝试从最大到最小对数组进行排序,但出现错误

问题描述

错误出现在用户输入 5 个单独的数字之后。我不确定为什么会收到此错误。Eclipse 中没有显示错误,我可以运行代码。

“线程“主”java.lang.ArrayIndexOutOfBoundsException 中的异常:section8.arraysLists.Main.main(Main.java:33) 中的 5”

这是我的代码:

import java.util.Arrays;
import java.util.Scanner;

public class Main {
    public static void main (String[] args) {
        Scanner scanner = new Scanner(System.in);

        int number = 5;

        System.out.println("Enter " + number + " numbers to sort:");
        int[] array = new int [number];

        for (int i=0; i<array.length; i++) {
            array[i] = scanner.nextInt();
        }

        int[] sortedArray = Arrays.copyOf(array, array.length);

        boolean flag = true;
        int temp;

        while (flag) {
            flag = false;

            for (int i=0; i<sortedArray.length; i++) {
                if (sortedArray[i] < sortedArray[i]+1) {
                    temp = sortedArray[i];
                    sortedArray[i] = sortedArray[i]+1;
                    sortedArray[i+1] = temp;

                    flag = true;
                }
            }
        }

        System.out.println("--Sorted Array--");
        System.out.println("Element 0 is " + sortedArray[0]);
        System.out.println("Element 1 is " + sortedArray[1]);
        System.out.println("Element 2 is " + sortedArray[2]);
        System.out.println("Element 3 is " + sortedArray[3]);
        System.out.println("Element 4 is " + sortedArray[4]);
        System.out.println("Element 5 is " + sortedArray[5]);

    }
}

输出

Enter 5 numbers to sort:
1
5
6
7
87
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 5
    at section8.arraysLists.Main.main(Main.java:33)

标签: javaarrays

解决方案


您正在尝试打印六个元素,但您的数组只有五个元素:数组的索引是从零开始的,那么由五个元素组成的数组只有以下索引值:0、1、2、3、4。

编辑

您的插入排序存在三个错误:

 for (int i=0; i<sortedArray.length; i++) {
      if (sortedArray[i] < sortedArray[i]+1) { // here you have 
                        // to compare two consecutives array's values... 
                       // in this manner this condition is always true!
            temp = sortedArray[i];
            sortedArray[i] = sortedArray[i]+1; // like previous one
            sortedArray[i+1] = temp; // here --> ArrayOutOfBound when i = 4

            flag = true;
          }
      }

也许正确的代码应该是:

 for (int i=0; i<sortedArray.length - 1; i++) {
      if (sortedArray[i] < sortedArray[i+1]) {
            temp = sortedArray[i];
            sortedArray[i] = sortedArray[i+1];
            sortedArray[i+1] = temp;

            flag = true;
          }
      }

推荐阅读