eclipse中提示小白第七行有误请问如何改正?(冒泡排序)

public class hellojava {

public static void main(String[] args) {
int a[]= {5,6,8,4,5},Amax,x;
for( x=1;x<a.length;x++){
if(a[x+1]<a[x]){
        Amax=a[x+1];
        a[x+1]=a[x];
        a[x]=Amax;
}
}
for(int y:a) {
    System.out.print(a[y]);
}

}
}

首先,报错是因为你的数组下标超过了a.length的长度.

  • 你定x的初始值为1,并且x<a.length,也就是5,循环4次,到最后出现了x+1=5
  • 而你的数组下标是从0开始的,一共五个数,也就是0,1,2,3,4.数组a的最大下标就是4,而循环后有一个下标是5,所以越界了.

其次,你的数组比较并不会真的排序,因为缺少了内循环.

  • 外循环用于得到一个数值,比如最开始的a[0],a[x+1]就是a[1],简单两者比较,只是相邻的两个数值比较.

最后,如果要排序的话,那就需要一个内循环了.

  • 比如说a[0]先和a[1]比较,如果a[0]大,就交换,那么a[1]的值就得到了a[0]的值,然后再继续和a[2],a[3],a[4]比较.
  • 也就是说,你要知道a[0]在数组a中的排序位置,那必须就得和其他的4个值比较才能知道.
  • 所以内循环的循环数就是: 数组长度-1,因为自己不会和自己比较

代码如下:

public static void main(String[] args) {

        int a[] = {5, 6, 8, 4, 5};
        int temp;

        System.out.println("排序前的数组为:");

        for (int i = 0; i < a.length; i++) {
            System.out.print(+a[i]+"\t");
        }

        for (int x = 0; x < a.length-1; x++) {
            for (int i = 0; i < a.length-1; i++) {
                if(a[i]>a[i+1]) {
                    temp = a[i];
                    a[i] = a[i+1];
                    a[i+1] =temp;
                }
             }
        }
        System.out.println();
        System.out.println("排序后的数组为:");
        for (int k:a) {
            System.out.print(k+"\t");
        }
    }
排序前的数组为:
5   6   8   4   5   
排序后的数组为:
4   5   5   6   8   

问题解决的话,请点下采纳。

public class hellojava {
    public static void main(String[] args) {
        int a[] = {5, 6, 8, 4, 5}, Amax, x, t;
        for (int i = 0; i < a.length - 1; i++)
        {
            Amax = i;
            for (x = i + 1; x < a.length; x++){
                if (a[Amax] < a[x]) 
                    Amax = x;
            }
            t = a[i];
            a[i] = a[Amax];
            a[Amax] = t;
        }
        for(int y : a) {
            System.out.print(y + " ");
        }
    }
}

8 6 5 5 4