当前位置:网站首页>错误:排序与角标越界
错误:排序与角标越界
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]比较就会越界边栏推荐
- [algorithm] sword finger offer2 golang interview question 2: binary addition
- Affichage du changement de valeur du Buff de gain de l'interface graphique de défaillance
- Unity3d, Alibaba cloud server, platform configuration
- Introduction to the daily practice column of the Blue Bridge Cup
- [algorithm] sword finger offer2 golang interview question 1: integer division
- [algorithm] sword finger offer2 golang interview question 5: maximum product of word length
- (the first set of course design) sub task 1-5 317 (100 points) (dijkstra: heavy edge self loop)
- FairyGUI循环列表
- [算法] 剑指offer2 golang 面试题2:二进制加法
- 染色法判定二分图
猜你喜欢
SVN更新后不出现红色感叹号
[algorithm] sword finger offer2 golang interview question 10: subarray with sum K
闇の連鎖(LCA+树上差分)
Implementation of Excel import and export functions
RTKLIB: demo5 b34f.1 vs b33
基本Dos命令
Database course design: college educational administration management system (including code)
Programming homework: educational administration management system (C language)
[algorithm] sword finger offer2 golang interview question 5: maximum product of word length
FGUI工程打包发布&导入Unity&将UI显示出来的方式
随机推荐
Matlab读取GNSS 观测值o文件代码示例
KF UD分解之伪代码实现进阶篇【2】
MySQL shutdown is slow
[算法] 劍指offer2 golang 面試題2:二進制加法
[algorithm] sword finger offer2 golang interview question 6: sum of two numbers in the sorting array
[算法] 剑指offer2 golang 面试题13:二维子矩阵的数字之和
Database course design: college educational administration management system (including code)
idea问题记录
SVN更新后不出现红色感叹号
Derivation of logistic regression theory
[算法] 剑指offer2 golang 面试题7:数组中和为0的3个数字
【rtklib】在rtk下使用抗差自适应卡尔曼滤波初步实践
FairyGUI人物状态弹窗
[Yu Yue education] guide business reference materials of Wuxi Vocational and Technical College of Commerce
Teach you to release a DeNO module hand in hand
Usage differences between isempty and isblank
Acwing-116 pilot brother
FairyGUI增益BUFF數值改變的顯示
Mysql database index
[算法] 剑指offer2 golang 面试题4:只出现一次的数字