第二层for循环出现问题

第二层for循环出现问题

    public static <E extends Comparable<E>> void sort2(E[] arr){
    //插入排序小优化
    for (int i = arr.length - 1; i >= 0; i --){
        E t = arr[i];
        for (int j = i + 1; j <= arr.length - 1; j ++){
            if (arr[j].compareTo(t) < 0)
                arr[j-1] = arr[j];
            else{
                arr[j-1] = t;
                break;
            }
        }
    }
}

我用了老师课上的students来测试,每一行都设置了断点在下图这一步出现了问题,程序直接跳过了第二个for循环内的代码,转到第一个for循环开始执行。

https://img1.sycdn.imooc.com//climg/61ed408c0908360222821358.jpg

但是此时j = 2,满足我设置的j<=len-1(len = 3)的条件,为什么还会跳出for循环呢

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
liuyubobobo 2022-01-24 01:44:33

跳过的应该是:


程序初始 i = 2,所以 j = 3,3 <= 2 不成立,所以直接跳过了。然后来到了 i = 1;


==========


如果你的问题不是这个的话,我通过你给的截图看不出你说的具体问题是什么。请在代码中添加一定的输出。(比如在内外循环内打印出 i 和 j 的值),然后描述:在什么测试用例下,你认为输出应该是怎样的?但是即使怎样的?你觉得有问题?


继续加油!:)

  • 提问者 偏不食肉糜 #1

    老师你好,你在答疑中提到的那个跳过我是可以理解的,这个跳过应该也不会影响程序的结果,我说的跳过是在执行时对内层第二个for循环的跳过,接下来我通过断点向您逐步展示。

    测试用例为三元的student列表,排序针对的是三个学生的分数属性,依次是:98, 100, 65.

    当 i=1时,对 t 赋值 a[i] = 100,初始化 int j=i(1),此时 a[j+1]=65 比 t 小,所以 if 的判断条件成立,因此将 a[j+1] 赋值给 a[j],此时 a[j] = 65。到此为止都没有问题,但是这一步执行完之后就会莫名其妙结束内层 for 循环,老师请看我的断点截图(关键变量的信息在图片下半部分):

    https://img1.sycdn.imooc.com//climg/61edfd2b09c7a8da20821712.jpg

    按照我写的内层 for 循环的条件,接下来 j=j+1 = 2,2< arr.length(3)还是成立的,应该继续执行 for循环内部代码,可是当我继续执行后,程序直接跳出了内层 for循环,如下图

    https://img1.sycdn.imooc.com//climg/61edfddc0929540120861589.jpg

    我觉的我的代码和您给的参考答案的差别是:您把if语句判断的条件写入了for循环继续执行的条件,而我刚接触算法与数据结构,想写详细一点在for内写了if-else,但是我搞不明白为什么代码会执行不出我想要的效果


    2022-01-24 09:18:31
  • liuyubobobo 回复 提问者 偏不食肉糜 #2

    当 i = 1 的时候,


    首先 j = i,即 j = 1,j + 1 = 1 + 1 = 2 < arr.length = 3 成立(即 2 < 3 成立),所以内层循环执行了一次。


    然后 j ++ 了,所以 j = 2 了。


    当 j = 2 的时候,j + 1 = 2 + 1 = 3,3 < 3 不成立,所以退出循环了。


    你的描述中,“接下来”的时候,j 已经是 2 了,所以 j + 1 是 3 了。

    2022-01-24 10:26:49
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
算法与数据结构
  • 参与学习       2583    人
  • 解答问题       1082    个

慕课网算法名师Liuyubobobo,5年集大成之作 从0到工作5年,算法与数据结构系统解决方案

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师