jiansgk 2022-08-08 19:10 采纳率: 100%
浏览 47
已结题

java 逻辑与 插入排序算法越界报错

问题遇到的现象和发生背景

问问各位,为什么下面插入排序代码如果将temp< r[j]写在&&前面就会报错
但是如果把j >= 0 写在前面就能正常运行
不知道那一步出错了
知道逻辑与有个短路效应

问题相关代码
public class InsetSort {

     public void InsertSort(int[] r,int n) {
        int temp, j;
         for(int i = 1; i<n ; i++) { //第一个数组元素不用排序,从第二个元素开始
                temp = r[i];   //数组下标为0的元素是哨兵,用来存储待插入元素
                for( j = i-1 ;  temp < r[j] && j >= 0 ; j--) {//分别寻找待插入元素之前的数组元素与待插入元素的关系
                                   //逻辑与具短路效果,第一个只要为假就不再对后面进行运算     
                    r[j+1]=r[j]; //将元素后移
                }
                r[j+1]=temp;
         }
     }
}

报错内容
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -1
    at SuanFa.InsetSort.InsertSort(InsetSort.java:9)
    at SuanFa.Test.main(Test.java:12)
  • 写回答

3条回答 默认 最新

  • 私房菜 移动开发领域优质创作者 2022-08-09 09:49
    关注

    都没说到重点。。。
    for( j = i-1 ; temp < r[j] && j >= 0 ; j--) {
    这个是你的代码,当 i 初始值为 1时,j 从0开始;
    当 j 为0,第一次满足条件,for 循环执行,最后会 j--,这个时候 j 变成了-1;
    再次进入判断条件时,temp < r[-1],这不就越界了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 8月18日
  • 已采纳回答 8月10日
  • 创建了问题 8月8日

悬赏问题

  • ¥15 运动想象脑电信号数据集.vhdr
  • ¥15 三因素重复测量数据R语句编写,不存在交互作用
  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目