当前位置:网站首页>错误:排序与角标越界
错误:排序与角标越界
2022-07-06 09:18:00 【非风之想】
错误提示:
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]比较就会越界边栏推荐
- SVN更新后不出现红色感叹号
- [算法] 剑指offer2 golang 面试题1:整数除法
- [algorithm] sword finger offer2 golang interview question 8: the shortest subarray with a sum greater than or equal to K
- idea中导包方法
- 微信小程序开发心得
- isEmpty 和 isBlank 的用法区别
- [algorithm] sword finger offer2 golang interview question 4: numbers that appear only once
- [算法] 剑指offer2 golang 面试题2:二进制加法
- [algorithm] sword finger offer2 golang interview question 10: subarray with sum K
- FairyGUI循环列表
猜你喜欢
Unity3D,阿里云服务器,平台配置
[algorithm] sword finger offer2 golang interview question 2: binary addition
Liste des boucles de l'interface graphique de défaillance
KF UD分解之UD分解基础篇【1】
Prove the time complexity of heap sorting
Fairygui joystick
Matlab读取GNSS 观测值o文件代码示例
The master of double non planning left the real estate company and became a programmer with an annual salary of 25W. There are too many life choices at the age of 25
[algorithm] sword finger offer2 golang interview question 1: integer division
In 2020, the average salary of IT industry exceeded 170000, ranking first
随机推荐
Database table splitting strategy
FairyGUI条子家族(滚动条,滑动条,进度条)
[algorithm] sword finger offer2 golang interview question 9: subarray with product less than k
(core focus of software engineering review) Chapter V detailed design exercises
[algorithm] sword finger offer2 golang interview question 7: 3 numbers with 0 in the array
PRIDE-PPPAR源码解析
地球围绕太阳转
[algorithm] sword finger offer2 golang interview question 4: numbers that appear only once
(the first set of course design) sub task 1-5 317 (100 points) (dijkstra: heavy edge self loop)
[offer78] merge multiple ordered linked lists
Itext 7 生成PDF总结
Fairygui loop list
IText 7 generate PDF summary
Usage differences between isempty and isblank
[算法] 剑指offer2 golang 面试题13:二维子矩阵的数字之和
Idea problem record
[algorithm] sword finger offer2 golang interview question 6: sum of two numbers in the sorting array
FairyGUI按钮动效的混用
What are the advantages of using SQL in Excel VBA
[offer9] implement queues with two stacks