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 求差集那个函数有问题,有无佬可以解决
  • ¥15 【提问】基于Invest的水源涵养
  • ¥20 微信网友居然可以通过vx号找到我绑的手机号
  • ¥15 寻一个支付宝扫码远程授权登录的软件助手app
  • ¥15 解riccati方程组
  • ¥15 display:none;样式在嵌套结构中的已设置了display样式的元素上不起作用?
  • ¥15 使用rabbitMQ 消息队列作为url源进行多线程爬取时,总有几个url没有处理的问题。
  • ¥15 Ubuntu在安装序列比对软件STAR时出现报错如何解决
  • ¥50 树莓派安卓APK系统签名
  • ¥65 汇编语言除法溢出问题