问题是:编写程序以初始化数组并按排序顺序打印它们。
现在,我尝试在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)
请检查代码,然后再回信给我...
答案 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