我应该如何覆盖 "compareTo" 以便我的代码不会出现异常?
How should I override "compareTo" so I do not get exception in my code?
这是我的代码:
import java.util.*
open class Food(private var calories: Long) : Comparable<Food> {
// override fun compareTo(other: Food): Int {
// return if(this.calories==other.calories)
// 0
// else if(this.calories>other.calories)
// +1
// else -1
// }
override fun toString(): String {
return "calories=$calories"
}
// override fun compareTo(other: Food)=compareValuesBy(this, other,
// { it.calories },
// { it.calories }
// )
}
class Flafel():Food(100){
override fun toString(): String {
return "Flafel ${super.toString()}"
}
}
class Pizza():Food(200){
override fun toString(): String {
return "Pizza ${super.toString()}"
}
}
class Hamburger():Food(300){
override fun toString(): String {
return "Hamburger ${super.toString()}"
}
}
class Restaurant {
val foodList = Array<Food?>(10) {null}
init {
for (i in 0 until foodList.size-1) {
var newObject=when((1..3).random()){
1->Flafel()
2->Pizza()
else->Hamburger()
}
foodList[i]=newObject
}
Arrays.sort(foodList)
for (i in 0 until foodList.size-1) {
println(foodList[i])
}
}
}
fun main() {
var lobsterRestaurant=Restaurant()
}
我尝试了两种代码(在代码中有注释)但是我得到了这个异常:
线程“main”中出现异常 java.lang.NullPointerException: 无法调用“java.lang.Comparable.compareTo(Object)”,因为“pivot”为空
在 java.base/java.util.ComparableTimSort.binarySort(ComparableTimSort.java:262)
在 java.base/java.util.ComparableTimSort.sort(ComparableTimSort.java:189)
在 java.base/java.util.Arrays.sort(Arrays.java:1041)
在餐厅。(Main.kt:50)
在 MainKt.main(Main.kt:57)
在 MainKt.main(Main.kt)
这部分代码有问题:
for (i in 0 until foodList.size-1)
您未填充数组的最后 10 个元素,它保持为空,因此会导致 NPE。如果您愿意这样做,那么它将起作用:
for (i in 0 until foodList.size)
那是因为 until
不包括范围内的最后一个数字。
这是我的代码:
import java.util.*
open class Food(private var calories: Long) : Comparable<Food> {
// override fun compareTo(other: Food): Int {
// return if(this.calories==other.calories)
// 0
// else if(this.calories>other.calories)
// +1
// else -1
// }
override fun toString(): String {
return "calories=$calories"
}
// override fun compareTo(other: Food)=compareValuesBy(this, other,
// { it.calories },
// { it.calories }
// )
}
class Flafel():Food(100){
override fun toString(): String {
return "Flafel ${super.toString()}"
}
}
class Pizza():Food(200){
override fun toString(): String {
return "Pizza ${super.toString()}"
}
}
class Hamburger():Food(300){
override fun toString(): String {
return "Hamburger ${super.toString()}"
}
}
class Restaurant {
val foodList = Array<Food?>(10) {null}
init {
for (i in 0 until foodList.size-1) {
var newObject=when((1..3).random()){
1->Flafel()
2->Pizza()
else->Hamburger()
}
foodList[i]=newObject
}
Arrays.sort(foodList)
for (i in 0 until foodList.size-1) {
println(foodList[i])
}
}
}
fun main() {
var lobsterRestaurant=Restaurant()
}
我尝试了两种代码(在代码中有注释)但是我得到了这个异常:
线程“main”中出现异常 java.lang.NullPointerException: 无法调用“java.lang.Comparable.compareTo(Object)”,因为“pivot”为空 在 java.base/java.util.ComparableTimSort.binarySort(ComparableTimSort.java:262) 在 java.base/java.util.ComparableTimSort.sort(ComparableTimSort.java:189) 在 java.base/java.util.Arrays.sort(Arrays.java:1041) 在餐厅。(Main.kt:50) 在 MainKt.main(Main.kt:57) 在 MainKt.main(Main.kt)
这部分代码有问题:
for (i in 0 until foodList.size-1)
您未填充数组的最后 10 个元素,它保持为空,因此会导致 NPE。如果您愿意这样做,那么它将起作用:
for (i in 0 until foodList.size)
那是因为 until
不包括范围内的最后一个数字。