程序是实现一个纯字母字符串排序,如:sort("acb") 返回"abc".
问题是:
      当测试字符串为“acb”时可以正确显示排序结果,
      当测试字符串为”dbca“时却显示:Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1
                                      at Sort.sort1(Sort.java:38)
                                      at Sort.main(Sort.java:9)
请大虾帮忙看看怎么出错了!
现在,源代码如下:import java.util.Scanner;
public class Sort 
{
    public static void main(String[] args) 
   {
        Scanner sca = new Scanner(System.in);
        System.out.println("请输入一个字符串:");
        String s = sca.next();
        System.out.println("排序前的字符串为: " + s + "\n" + 
               "排序后的字符串为: " + sort1(s));   }   public static String sort1(String s){
   //插入排序
     char[] array = s.toCharArray();
     for(int i = 1;i < s.length();i++){
     char temp = array[i];
     int j = i - 1;
     //大的字符后移操作
     while(array[j] > temp && j >= 0){
          array[j + 1] = array[j];
     j--;
     }
    //插入操作
    array[j + 1] = temp;
    }   StringBuffer ss = new StringBuffer();
   ss.append(array);
   return ss.toString();
  }
}

解决方案 »

  1.   

    while(array[j] > temp && j >= 0) 这句有点问题输入dbca后,i=1,j=i-1=0;d比c大所以j--后j=-1,array[-1]越界了。可以换下顺序 
    while( j >= 0 && array[j] > temp)
    先判断j后如果j<0 后面的将不会执行
      

  2.   


    在j--使得j = -1后,执行下句:
    //插入操作
        array[j + 1] = temp;
    此时,j+ 1 = 0,array[0],不存在越界啊!
      

  3.   


    array[j +1] = temp;在for循环里,而不是再while循环中啊,,3楼能说下具体为什么越界了吗!
      

  4.   

      while(array[j] > temp && j >= 0){
              array[j + 1] = array[j];
         j--;
         }就这一块有问题啦。跟for循环无关的。
    就是循环的时候j可能是负的,所以j>=0要放在前面。