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