Kotlin 中的“不兼容类型:IntRange 和 Int”错误

Sha*_* PP 5 function kotlin

下面是我的代码

import java.util.*

fun main() {
    println("Hello World")
    dayOfWeek()
}

fun dayOfWeek() {
    var date : Int = Calendar.getInstance().get(Calendar.DATE).toInt()
    when (date) {
        1..5 -> {
            println("Hello 1-5")
        }
        5 -> {
            println("Hello 5")
        }
        3, 7, 9 -> {
            println("3 7 9")
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

当我做这个节目时是一个错误

不兼容的类型:IntRange 和 Int

如何解决这个问题?

r6q*_*r6q 9

您需要in先指定前缀range

fun main() {
    println("Hello World")
    dayOfWeek()
}

fun dayOfWeek() {
    when (Calendar.getInstance().get(Calendar.DATE)) {
        in 1..5 -> {
            println("Hello 1-5")
        }
        5 -> {
            println("Hello 5")
        }
        3, 7, 9 -> {
            println("3 7 9")
        }
    }
}

Run Code Online (Sandbox Code Playgroud)

不确定您的应用程序中的用例是什么,但请注意,当日期为或时,第二个和第三个案例将不会3执行5


小智 4

您从日历中提取的值是一个Int. 该表达式将尝试将其与由文字表示的类型when匹配(有关该类的更多信息,请参见此处)。这些类型不同,因此会出现错误IntRange1..5

不兼容的类型:IntRange 和 Int

您想要的是询问该整数是否在该range,因此您只需为该范围添加前缀,如此指定的 with range的用法。inwhen

所以代码看起来像

fun dayOfWeek() {
var date : Int = Calendar.getInstance().get(Calendar.DATE).toInt()
    when (date) {
        in 1..5 -> {
            println("Hello 1-5")
        }
        5 -> {
            println("Hello 5")
        }
        3, 7, 9 -> {
            println("3 7 9")
        }
    }
}
Run Code Online (Sandbox Code Playgroud)