Kotlin[linked List]由于表达式复杂,无法进行智能转换

Kotlin[linked List]由于表达式复杂,无法进行智能转换,kotlin,Kotlin,背景:它是一个链表(订购送货任务),涉及不同的购物车。我需要在OrderProcessing类中编写一个函数(fun sortByTotal)来进行排序,以便具有最高价格值的购物车可以首先进行排序 我的困难是 我应该如何修复函数sortByTotal中的任何错误 1.1错误:(32,51)Kotlin:无法对“OrderProcessing.OrderNode”进行智能转换,因为“run.next”是一个复杂的表达式 1.2错误:(33,20)Kotlin:类型不匹配:推断的类型为Double,

背景:它是一个链表(订购送货任务),涉及不同的购物车。我需要在OrderProcessing类中编写一个函数(fun sortByTotal)来进行排序,以便具有最高价格值的购物车可以首先进行排序

我的困难是

  • 我应该如何修复函数sortByTotal中的任何错误
  • 1.1错误:(32,51)Kotlin:无法对“OrderProcessing.OrderNode”进行智能转换,因为“run.next”是一个复杂的表达式

    1.2错误:(33,20)Kotlin:类型不匹配:推断的类型为Double,但为Double。应为Companion

    1.3错误:(34,49)Kotlin:无法对“OrderProcessing.OrderNode”进行智能转换,因为“run.next”是一个复杂的表达式

    1.4错误:(38,31)Kotlin:未解析的引用:顺序 (我可以知道,为什么这个“订单”有错误,但第32、33行没有错误?)

  • 如何将每个购物车链接到OrderProcessing下的OrderNode?目前未保存每个购物车信息, 而是在每次“清除购物车”后更新
  • 我知道有很多错误,回答其中的任何部分或给我一些提示,我已经非常感谢。谢谢你的好意

    我的代码如下:

     Class OrderProcessing {
            var first: OrderNode? = null
          // Linked List
            data class OrderNode(val order: Order, var next: OrderNode?)
    
        fun sortByTotal () {
        var run = first
            var temp = Double
                while (run?.next != null) {
        32        if (run.order.shoppingCart.totalprice  <= run.next.order.shoppingCart.totalprice){
        33            temp = run.order.shoppingCart.totalprice
        34            run.order.shoppingCart.totalprice = run.next.order.shoppingCart.totalprice
                    run.next.order.shoppingCart.totalprice = temp
                    }
    
        38        run?.next = OrderNode(order, run?.next)
                }
            }
    
    三,

    1.1错误:(32,51)Kotlin:无法对“OrderProcessing.OrderNode”进行智能转换,因为“run.next”是一个复杂的表达式

    即使您检查了
    run?.next!=空
    ,以后仍有可能
    next
    变为
    null
    。添加非空断言将有帮助:
    run.next!!。订单

    1.2错误:(33,20)Kotlin:类型不匹配:推断的类型为Double,但为Double。应为Companion

    var-temp=Double
    -您为变量指定了
    Double
    ,而不是声明其类型,您的意思可能是
    var-temp:Double

    1.4错误:(38,31)Kotlin:未解析的引用:顺序

    run
    是具有
    val-order:order
    OrderNode
    的实例
    sortByTotal
    是一种
    OrderProcessing
    方法,没有名为
    order
    的字段或局部变量


    如果您需要对自定义链接列表进行排序,那么仅交换购物车总价(如第33-35行中所述)不是一个好主意,因为它将保留
    shoppingList
    ,但会弄乱总价。相反,您需要相应地更改
    next
    指针。一种可能的方法是将所有的
    OrderNode
    放入一个集合中,然后按价格排序,然后迭代并重置每个
    OrderNode
    next
    指针。谢谢您的简明解释,尽管我无法使用代码,但我仍然学到了。请问,“将所有OrderNodes放入一个集合”是什么意思?OrderNodes现在是一个包含订单集合的数据类。我有什么误解吗?感谢您的建议。@user12595983每个
    OrderNode
    都只引用下一个节点,这使得对整个节点列表进行排序变得困难。您可以尝试为自定义链表(或在internet上查找)实现自己的排序算法,或者,正如我所建议的,将所有的
    OrderNode
    s逐个放入标准Kotlin
    list
    中,然后对该列表进行排序并重置
    next
    引用
    Class ShoppingCart () {
        private val shoppingList = mutableListOf<Pair<Product, Int>>
      // totalprice = sum of item price in each cart
       val totalprice : double
    ... }
    
    data class Order(
        val shoppingCart: ShoppingCart,
        val address: Address
    )
    
    fun main(){
    
        // while loop until "exit", Menu with functions to add goods to cart, clear cart, show shopping list (items and price)