qq_42649008 2019-09-04 23:22 采纳率: 100%
浏览 268
已采纳

java小白写for循环时加入swap编译通过,执行报错

class demo0503
{
public static void printArray(int[] arr)
{
System.out.print("[");
for (int x=0;x<arr.length;x++)
{
if(x!=arr.length-1)
System.out.print(arr[x]+", ");
else
System.out.println(arr[x]+"]");
}

}
public static void main(String[] args)
{   
int[] arr={33,77,57,66,44,88,55};
printArray(arr);
selectSort(arr);
printArray(arr);

}
public static void swap(int[] arr,int a,int b)
{
    int temp=arr[a];
    arr[a]=arr[b];
    arr[b]=temp;
}
    public static void selectSort(int[] arr)
{
    for (int x=0;x<arr.length-1;x++ )
    {
    for(int y=x+1;y<arr.length;y++)
        {
            if(arr[x]>arr[y])
            {
                swap(arr,y,y+1);
            }
        }
    }
}
错误如下:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 7
    at demo0503.swap(demo0503.java:31)
    at demo0503.selectSort(demo0503.java:43)
    at demo0503.main(demo0503.java:24)

求助老鸟解答,java版本12

  • 写回答

3条回答 默认 最新

  • 毕小宝 博客专家认证 2019-09-05 08:47
    关注

    代码有问题,数组越界了。内层循环结束条件 y < arr.length ,而你后面后面交换时用的交换的是 y, y+1,改成 y-1,y 试试:

     for(int y=x+1;y<arr.length;y++)
            {
                if(arr[x]>arr[y])
                {
                    swap(arr,y-1,y);//保证 y-1 在数组长度范围内
                }
            }
        }
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 Visual Studio问题
  • ¥15 state显示变量是字符串形式,但是仍然红色,无法引用,并显示类型不匹配
  • ¥20 求一个html代码,有偿
  • ¥100 关于使用MATLAB中copularnd函数的问题
  • ¥20 在虚拟机的pycharm上
  • ¥15 jupyterthemes 设置完毕后没有效果
  • ¥15 matlab图像高斯低通滤波
  • ¥15 针对曲面部件的制孔路径规划,大家有什么思路吗
  • ¥15 钢筋实图交点识别,机器视觉代码
  • ¥15 如何在Linux系统中,但是在window系统上idea里面可以正常运行?(相关搜索:jar包)