错误提示:
java.lang.ArrayIndexOutOfBoundsException: Index 8 out of bounds for length 8
java.lang.ArrayIndexOutOfBoundsException: Index -1 out of bounds for length 8
-1,8索引超出了数组索引(如果用i–,j–就可能出现-1角标越界)
代码如下:
public class StringTest_1
{
public static void main(String[] args)
{
String[] arr={"abc","NBA","CBA","java","Hong","demo","qq","WX"};
printArray(arr);
sortString(arr);
printArray(arr);
maopaoString(arr);
printArray(arr);
}
//冒泡排序
public static void maopaoString(String[] arr)
{
for(int i=0;i<arr.length-1;i++)
for(int j=0;j<arr.length-1-i;j++)
{
if(arr[j].compareTo(arr[j+1])>0)
swap(arr,j,j+1); //swap(arr,arr[j],arr[j+1]);
}
}
//选择排序
public static void sortString(String[] arr)
{
for(int i=0;i<arr.length-1;i++)
for(int j=i+1;j<arr.length;j++)
{
if(arr[i].compareTo(arr[j])>0)
swap(arr,i,j);//swap(arr,arr[i],arr[j]);
}
}
//互换元素
public static void swap(String[] arr,int i,int j)
{
String temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
遍历并打印数组
public static void printArray(String[] arr)
{
System.out.print("[");
for(int i=0;i<arr.length;i++)
{
if(i!=arr.length-1)
System.out.print(arr[i]+",");
else
System.out.println(arr[i]+"]");
}
}
}
//选择排序:按索引顺序每次拿出一个元素与其之后的每个元素挨个比较
public static void sortString(String[] arr)
{
for(int i=0;i<arr.length-1;i++)
for(int j=i+1;j<arr.length;j++)
{
if(arr[i].compareTo(arr[j])>0)
swap(arr,i,j);//swap(arr,arr[i],arr[j]);
}
}
外循环:i到arr.length-1,共arr.length-2次排序,也就是把0到倒数第二个元素每个都拿出来一次,并与其后面的元素比较当然这里是内循环的事了,因为最后一个元素之后没有元素,所以是0<arr.lengrh-1。arr[i]就是外循环每次拿出的元素。
内循环:j到arr.length,每拿出来一个元素都要与其之后的元素比较,所以j=i+1,外循环每加一次,内循环比较的个数就少一个,依次类推,所以外循环拿出来的元素每次都会与最后一个比较,直到倒数第二个元素与最后一个元素比较,完成排序。
小心角标越界,如果拿arr[i]是最后一个元素,还与arr[j]比较就会越界
//冒泡排序:每趟排出一个元素的位置,相邻索引比较
public static void maopaoString(String[] arr)
{
for(int i=0;i<arr.length-1;i++)
for(int j=0;j<arr.length-1-i;j++)
{
if(arr[j].compareTo(arr[j+1])>0)
swap(arr,j,j+1); //swap(arr,arr[j],arr[j+1]);
}
}
外循环:外循环控制总趟数,每趟排出一个元素,依次类推,当排剩下最后一个元素,没有与其比较的元素,所以就是arr.length-1躺排序
内循环:内循环控制每趟排序,arr[j]与arr[j+1]比较,每两个相邻的元素都要比较一次,第一趟排完最大(或最小)的元素就会放到最后一个 位置arr.length,依次类推,最后一趟第一个元素arr[0]与第二个元素arr[1]比较,所以每趟比较的次数为arr.length-1-i次。
小心角标越界,如果拿arr[j]是最后一个元素,还与arr[j+1]比较就会越界