程序是实现一个纯字母字符串排序,如: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();
}
}
问题是:
当测试字符串为“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();
}
}
while( j >= 0 && array[j] > temp)
先判断j后如果j<0 后面的将不会执行
在j--使得j = -1后,执行下句:
//插入操作
array[j + 1] = temp;
此时,j+ 1 = 0,array[0],不存在越界啊!
array[j +1] = temp;在for循环里,而不是再while循环中啊,,3楼能说下具体为什么越界了吗!
array[j + 1] = array[j];
j--;
}就这一块有问题啦。跟for循环无关的。
就是循环的时候j可能是负的,所以j>=0要放在前面。