Kotlin 取代;如果;加上;什么时候;在科特林
在kotlin中将Kotlin 取代;如果;加上;什么时候;在科特林,kotlin,Kotlin,在kotlin中将if表达式转换为when表达式时遇到问题。我的If代码如下所示: fun main() { var cardPoints = 7_000 val cardLevel: String = if (cardPoints >= 0 && cardPoints < 1000) { "pearl" } else if (cardPoints >= 1000 && cardPoints <
if
表达式转换为when
表达式时遇到问题。我的If代码如下所示:
fun main() {
var cardPoints = 7_000
val cardLevel: String = if (cardPoints >= 0 && cardPoints < 1000) {
"pearl"
} else if (cardPoints >= 1000 && cardPoints < 5_000) {
"silver"
} else if (cardPoints >= 5_000 && cardPoints < 10_000) {
"gold"
} else {
"platinum"
}
val plural = if(cardPoints > 1 || cardPoints == 0) "s" else ""
println("You have $cardPoints point$plural and are at the $cardLevel level.")
}
fun main(){
var cardPoints=7_000
val cardLevel:String=if(cardPoints>=0&&cardPoints<1000){
“珍珠”
}否则如果(卡点数>=1000和卡点数<5000){
“银色”
}否则如果(卡点数>=5_000和卡点数<10_000){
“黄金”
}否则{
“白金”
}
val复数=if(cardPoints>1 | | cardPoints==0)“s”else“
println(“您有$cardPoints point$复数,并且处于$cardLevel级别。”)
}
但是,我现在必须将其转换为“When”表达式(最好是在范围内),这是我到目前为止得到的:
fun main() {
var cardPoints = 7_000
val cardLevel: String = when {
cardPoints >= 0 && cardPoints < 1000 -> "pearl"
cardPoints >= 1000 && cardPoints < 5_000 -> "silver"
cardPoints >= 5_000 && cardPoints < 10_000 -> "gold"
else -> "platinum"
}
val plural = if(cardPoints > 1 || cardPoints == 0) "s" else ""
println("You have $cardPoints point$plural and are at the $cardLevel level.")
}
fun main(){
var cardPoints=7_000
val cardLevel:字符串=何时{
cardPoints>=0&&cardPoints<1000->“pearl”
cardPoints>=1000&&cardPoints<5000->“银色”
cardPoints>=5_000&&cardPoints<10_000->黄金
else->“白金”
}
val复数=if(cardPoints>1 | | cardPoints==0)“s”else“
println(“您有$cardPoints point$复数,并且处于$cardLevel级别。”)
}
我不确定还有什么需要调整,或者我是否完全遗漏了什么。我将感谢任何帮助和建议。谢谢。您可以在操作符中与一起使用来解决此问题
var cardPoints = 7000
val cardLevel: String = when {
cardPoints in 0..999 -> "pearl"
cardPoints in 1000..4999 -> "silver"
cardPoints in 5000..9999 -> "gold"
else -> "platinum"
}
您可以与
中的运算符一起使用来解决此问题
var cardPoints = 7000
val cardLevel: String = when {
cardPoints in 0..999 -> "pearl"
cardPoints in 1000..4999 -> "silver"
cardPoints in 5000..9999 -> "gold"
else -> "platinum"
}
你也可以使用
fun main () {
var cardPoints = 7_000
val cardLevel: String = when(cardPoints) {
in 0..1000 -> "pearl"
in 1000..5000 -> "silver"
in 5000..10000 -> "gold"
else -> "platinum"
}
val plural = if(cardPoints > 1 || cardPoints == 0) "s" else ""
println("You have $cardPoints point$plural and are at the $cardLevel level.")
}
你也可以使用
fun main () {
var cardPoints = 7_000
val cardLevel: String = when(cardPoints) {
in 0..1000 -> "pearl"
in 1000..5000 -> "silver"
in 5000..10000 -> "gold"
else -> "platinum"
}
val plural = if(cardPoints > 1 || cardPoints == 0) "s" else ""
println("You have $cardPoints point$plural and are at the $cardLevel level.")
}
一种更简单(也更有效)的方法:在
求值时,只需省略范围并利用的顺序:
什么时候{
cardPoints<0->错误(“这可能不应该是白金,对吧?”)
cardPoints<1000->“pearl”
积分<5000->银牌
信用卡积分<10000->“黄金”
else->“白金”
}
这当然也适用于if
本身:
if(点数<0)错误(“不是白金,对吗?”)
否则,如果(点数<1000)“珍珠”
如果(积分<5000)“银牌”
如果分数<10000,则为“黄金”
“白金”
在这两种情况下,您不必重复前面一步已经计算过的内容,例如,如果它不低于0,则下一个条件不需要重复=0
,因为我们已经知道它不是<0
,并且在下一点只能是=0
。如果不低于1000,则下一个条件不需要重复,即>=1000
。如果愿意,您可以将每个If(x)else If(!x&&y)
简化为If(x)else If(y)
如果使用范围,请记住它会慢得多(在我的机器上,系数为~3-4),如果性能不是问题,当然可以忽略这一点
如果我认为<0
不是白金是错误的,那么我可能也会在那里返回“白金”
,而不是使用范围。一种更简单(更有效)的方法:在评估时,只需省略范围并利用的顺序:
什么时候{
cardPoints<0->错误(“这可能不应该是白金,对吧?”)
cardPoints<1000->“pearl”
积分<5000->银牌
信用卡积分<10000->“黄金”
else->“白金”
}
这当然也适用于if
本身:
if(点数<0)错误(“不是白金,对吗?”)
否则,如果(点数<1000)“珍珠”
如果(积分<5000)“银牌”
如果分数<10000,则为“黄金”
“白金”
在这两种情况下,您不必重复前面一步已经计算过的内容,例如,如果它不低于0,则下一个条件不需要重复=0
,因为我们已经知道它不是<0
,并且在下一点只能是=0
。如果不低于1000,则下一个条件不需要重复,即>=1000
。如果愿意,您可以将每个If(x)else If(!x&&y)
简化为If(x)else If(y)
如果使用范围,请记住它会慢得多(在我的机器上,系数为~3-4),如果性能不是问题,当然可以忽略这一点
如果我认为<0
不是白金是错误的,那么我可能也会在那里返回“白金”
,而不是使用范围。但是范围应该以999
、4999
和9999
结束,对吗?@tpschmidt你是对的。我修正了答案。谢谢。嗯,我尝试了在中使用此方法,但不幸的是,我收到了一个错误:未解决的引用:cardPoints?我从原始问题中提取了相关片段。在when
表达式之前定义变量。它终于起作用了!感谢您的帮助:)我收到了上面提到的错误,因为范围的结尾已关闭。但是范围应该以999
、4999
和9999
结尾,对吗?@tpschmidt您是对的。我修正了答案。谢谢。嗯,我尝试了在中使用此方法,但不幸的是,我收到了一个错误:未解决的引用:cardPoints?我从原始问题中提取了相关片段。在when
表达式之前定义变量。它终于起作用了!感谢tpschmidt和@AndrejH的帮助:)我收到了上面提到的错误,因为范围的末尾已关闭。这不是一个答案,而是一个提示:如果您使用的是Android Studio或IntelliJ,则有一种自动方式,而不是手动转换。如果
,您可以将光标移动到,按Alt+Enter并选择“用when替换if”。这种方式的好处是,它可以防止在手动转换代码时可能发生的错误。这不是一个答案,而是一个提示:如果您使用的是Android Studio或IntelliJ th,请不要手动转换