首页 新闻 会员 周边 捐助

Java有关数组java.lang.ArrayIndexOutOfBoundsException 异常的问题

0
悬赏园豆:5 [已解决问题] 解决于 2012-07-01 16:21

程序是实现一个纯字母字符串排序,如: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)
请大虾帮忙看看怎么出错了!
现在,源代码如下:

 1 import java.util.Scanner;
 2 public class Sort 
 3 {
 4     public static void main(String[] args) 
 5    {
 6         Scanner sca = new Scanner(System.in);
 7         System.out.println("请输入一个字符串:");
 8         String s = sca.next();
 9         System.out.println("排序前的字符串为: " + s + "\n" + 
10                "排序后的字符串为: " + sort1(s));
11 
12    }
13 
14    public static String sort1(String s){
15    //插入排序
16      char[] array = s.toCharArray();
17      for(int i = 1;i < s.length();i++){
18      char temp = array[i];
19      int j = i - 1;
20      //大的字符后移操作
21      while(array[j] > temp && j >= 0){
22           array[j + 1] = array[j];
23      j--;
24      }
25     //插入操作
26     array[j + 1] = temp;
27     }
28 
29    StringBuffer ss = new StringBuffer();
30    ss.append(array);
31    return ss.toString();
32   }
33 }

 

 

戈非的主页 戈非 | 初学一级 | 园豆:184
提问于:2012-06-30 22:32
< >
分享
最佳答案
0

报错很明显时说数组访问越界了,你访问了数组array的array[-1]

原因很简单在你的while循环里,

21      while(array[j] > temp && j >= 0){
22           array[j + 1] = array[j];
23      j--;
24      }
当j = 0时执行循环,之后j = -1然后whi'le就再一次判断要不要循环,然后你就来到了array[j] > temp!
就是这样访问了array[-1],解决方法也很简单,吧while里的判断语句位置换一下。即,改成:
while ( j >= 0 && array[j] > temp)即可。道理你肯定明白。
最后补充一下:你的算法思想很简单但是代码里面会执行不少冗余步骤,建议你看那一下,简单插入排序算法,的步骤。
最后说一下,我其实是菜鸟一个。计算机专业,大一,学过C ,数据结构而已。暑假打算研究一下JAVA的,看了你的代码,我对JAVA 的输入,和String to char array 知道了一点。




收获园豆:5
LanderlYoung | 菜鸟二级 |园豆:214 | 2012-06-30 23:58
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册