当前位置: 首页 > 知识库问答 >
问题:

Kotlin[链表]智能强制转换是不可能的,因为表达式复杂

冉子石
2023-03-14

我的困难是

  1. 如何修复函数SortByTotal中的任何错误?

1.1错误:(32,51)Kotlin:无法智能强制转换为“OrderProcessing.OrderNode”,因为“Run.Next”是一个复杂的表达式

我明白有很多错误,回答其中的任何一个部分或者给我一些暗示已经很感激了。谢谢你的好意。

我的代码如下:

 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)
            }
        }

涉及的类:

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)

共有1个答案

韦辰钊
2023-03-14

1.1错误:(32,51)Kotlin:无法智能强制转换为“OrderProcessing.OrderNode”,因为“Run.Next”是一个复杂的表达式

即使您检查run?.next!=null,但next稍后仍可能变为null添加非空断言将有所帮助:run.next!!.order

1.2错误:(33,20)Kotlin:类型不匹配:推断的类型是Double但需要Double.Companion

1.4错误:(38,31)Kotlin:未解析引用:order

runOrderNode的实例,它具有的val order:orderSortByTotalOrderProcessing方法,没有称为Order的字段或局部变量。

如果您需要对自定义链表进行排序,那么仅仅交换购物车总价(就像第33-35行所做的那样)不是一个好主意,因为它会保留shoppinglist但却会弄乱总价。相反,您需要相应地更改next指针。一种可能的方法是将所有OrderNode放入一个集合中,然后按价格对其排序,然后为每个OrderNode迭代和重置Next指针。

 类似资料: