当前位置:网站首页>错误:排序与角标越界
错误:排序与角标越界
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]比较就会越界边栏推荐
- Fabrication of fairygui simple Backpack
- Excel导入,导出功能实现
- [算法] 剑指offer2 golang 面试题8:和大于或等于k的最短子数组
- Compile GDAL source code with nmake (win10, vs2022)
- MySQL error warning: a long semaphore wait
- There is no red exclamation mark after SVN update
- FairyGUI简单背包的制作
- Mysql database reports an error: row size too large (> 8126) Changing some columns to TEXT or BLOB or using ROW_ FORMAT=DY
- Particle system for introduction to unity3d Foundation (attribute introduction + case production of flame particle system)
- 雇佣收银员【差分约束】
猜你喜欢

Easy to use shortcut keys in idea

【无标题】

FGUI工程打包发布&导入Unity&将UI显示出来的方式

FairyGUI人物状态弹窗

FairyGUI增益BUFF数值改变的显示

There is no red exclamation mark after SVN update

Fabrication d'un sac à dos simple fairygui

Mysql database index

idea问题记录
![[algorithm] sword finger offer2 golang interview question 6: sum of two numbers in the sorting array](/img/d5/4bda133498f71ae9fd7a64c6cba8f0.png)
[algorithm] sword finger offer2 golang interview question 6: sum of two numbers in the sorting array
随机推荐
[offer29] sorted circular linked list
雇佣收银员【差分约束】
WSL common commands
Pride-pppar source code analysis
2021.11.10 compilation examination
Unity3d, Alibaba cloud server, platform configuration
微信小程序开发心得
(课设第一套)1-4 消息传递接口 (100 分)(模拟:线程)
FairyGUI循環列錶
[algorithm] sword finger offer2 golang interview question 9: subarray with product less than k
FairyGUI人物状态弹窗
平衡二叉树详解 通俗易懂
Halcon knowledge: gray_ Tophat transform and bottom cap transform
Combination of fairygui check box and progress bar
Office prompts that your license is not genuine pop-up box solution
Teach you to release a DeNO module hand in hand
FairyGUI增益BUFF數值改變的顯示
堆排序【手写小根堆】
FairyGUI簡單背包的制作
Database table splitting strategy