Java数组排序

时间:2019-03-17 16:13:32

标签: java arrays

问题是:编写程序以初始化数组并按排序顺序打印它们。

现在,我尝试在Java中通过在变量“ maxIn”中获取数组中最大值的索引,然后将其与最后一个索引变量交换来解决它。 这样,将max变量交换到最后一个位置,然后交换last-1,然后交换last-2,以便最后我将得到一个排序数组!

我写的代码如下:

`class ArraySort
{
    public static void main(String[] args) {
        int[] a={10,2,65,45,1};
        int maxInd=0;
        int j,i;

        for(i=5;i>0;i++)                    //4
        {
            for(j=0;j<i;j++)                //0<4
            {
                if(a[j]>a[maxInd])          //ArrayIndexOutOfBoundException
                    maxInd=j;
            }

            j--;                //because j is 5 which is not the last index

            //swap last element with max value
            a[j]=a[j]+a[maxInd];
            a[maxInd]=a[j]-a[maxInd];
            a[j]=a[j]-a[maxInd];
        } 

        for(i=0;i<5;i++)
            System.out.println(a[i]+"\t");
    }
}`

我遇到了一个运行时异常: 线程“主”中的异常java.lang.ArrayIndexOutOfBoundsException:5         在ArraySort.main(28ArraySort.java:12)

请检查代码,然后再回信给我...

1 个答案:

答案 0 :(得分:0)

这是因为您的循环从5开始,并在应该添加索引的位置添加了++

 for( i = 5; i > 0; i--)

并在if条件中添加一个i!= maxInd,因为它在交换您的工作方式时会出现问题

if(a[j]>a[maxInd] && j!=maxInd){    
 maxInd=j;
}

例如

j=4 maxInd=4 

a[j] =45 , a[maxInd]= 45
a[j] = a[j]+ a[maxInd] =90            // 90 = 45 + 45
a[maxInd] = a[maxInd] -a[j] = 0       // 0 = 90 - 90
a[j]= a[j] - a[maxInd] = 0            // 0 = 0 - 0