日期:2014-05-20  浏览次数:20716 次

对你来说很简单的问题,对我而言总是报告运行时错误(在线等)
public   class   NumSort   {
public   static   void   main(String[]   args)   throws   Exception{
int[]   a   =   new   int[args.length];
for(int   i=0;i <args.length;i++){
a[i]=Integer.parseInt(args[i]);
}
print(a);
//System.out.println();
selectionSort(a);
print(a);  
}

private   static   void   selectionSort(int[]   a)   {

for(int   i   =   0;i <a.length;i++)   {
for(int   j=   i+1;i <a.length;j++)   {

if(a[i]> a[j])   {
int   temp   =   a[i];
a[i]=a[j];
a[j]=temp;
}
}
}
}

static   void   print(int[]   s)   {
for(int   i=0;i <s.length;i++){
System.out.print(s[i]+ "   ");
}
System.out.println();
}

}


以上的代码,编译通过,在运行时总是说arrayindexoutofboundsexception

------解决方案--------------------
数组溢出
------解决方案--------------------
直接放到一个List里面sort就行了,何必自己写呢。
------解决方案--------------------
for(int i = 0;i <a.length;i++) {
for(int j= i+1;i <a.length;j++) {

if(a[i]> a[j]) {
int temp = a[i];
a[i]=a[j];
a[j]=temp;
}
}
}

第二个for循环多了
------解决方案--------------------
for(int j= i+1;i <a.length;j++) { //是 j < a.length,写错了
------解决方案--------------------
当i=a.length-1时,j=i+1时,j的值超出数组上届
------解决方案--------------------
for(int j= i+1;i <a.length;j++) { 应该是 for(int j= i+1;j <a.length;j++) {
不然是个死循环