You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

调试链表中购物车总价排序检查函数及新手调试资源咨询

链表订单总价排序检查函数返回错误的修复方案及新手调试建议

问题分析

我来帮你梳理下问题~你写的isSorted()函数里有几个明显的逻辑漏洞,导致返回结果不符合预期:

  1. 空指针隐患:你用run.next!!强制解包,当run是链表最后一个节点时,run.next是null,运行时会直接抛出空指针异常(编译器没报错是因为它没法预判运行时的null情况)
  2. 逻辑完全颠倒:你的判断逻辑是「当前节点总价大于下一个时移动指针,然后设sort为true」,但我们要检查的是是否存在逆序(当前>下一个),一旦存在就说明链表未排序
  3. 初始值与循环逻辑错误:sort初始设为false,但循环里不管情况如何最后都把它设为true,这会导致不管链表是否有序,最终都返回true

修复后的代码

修改后的isSorted()函数逻辑更严谨,能正确判断排序状态:

fun isSorted(): Boolean {
    // 空链表或只有一个节点,默认是有序的
    var current = first ?: return true
    // 遍历到倒数第二个节点就停止,避免访问null的next
    while (current.next != null) {
        val currentPrice = current.order.shoppingCart.totalprice
        val nextPrice = current.next!!.order.shoppingCart.totalprice
        // 发现逆序直接返回false,无需继续遍历
        if (currentPrice > nextPrice) {
            return false
        }
        // 移动到下一个节点
        current = current.next!!
    }
    // 遍历完所有节点都无逆序,返回true
    return true
}

关键修改点说明

  • 处理边界场景:空链表或只有一个节点时,直接返回true(没有需要比较的元素,默认有序)
  • 循环条件改为current.next != null,避免访问最后一个节点的null next
  • 一旦发现逆序立刻返回false,减少不必要的遍历
  • 只有遍历完所有节点都没发现逆序,才返回true

新手调试技巧推荐

对于新手来说,调试这类问题可以试试这些实用方法:

  • 打印关键日志:在循环里打印每个节点的totalprice,比如println("当前节点总价:${current.order.shoppingCart.totalprice}"),直观看到每一步的数值变化,快速定位逻辑问题
  • IDE断点调试:在IntelliJ IDEA或Android Studio里,点击代码行号左侧设置断点,启动调试模式后一步步执行代码,观察current、current.next等变量的实时值,看是否符合预期
  • 测试边界用例:单独验证几种典型场景:
    • 空链表:调用isSorted()应该返回true
    • 仅一个订单节点:返回true
    • 按总价升序排列的链表:返回true
    • 存在逆序的链表(比如第一个节点总价大于第二个):返回false
  • 简化逻辑分步验证:先写只有两个节点的测试用例,验证函数能正确判断两个节点的顺序,没问题再扩展到多个节点的场景

内容的提问来源于stack exchange,提问作者user12595983

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 07:17:35