如何在Kotlin中实现开关案例,是否可以在Kotlin中替换java的开关案例代码?我想要在Kotlin中使用此代码
switch (5){ case 1: // Do code break; case 2: // Do code break; case 3: // Do code break; }
答案 0 :(得分:4)
只需使用何时关键字。如果要循环播放,可以这样做:
var option = ""
var num = ""
while(option != "3") {
println("Choose one of the options below:\n" +
"1 - Hello World\n" +
"2 - Your number\n" +
"3 - Exit")
option = readLine().toString()
// equivalent to switch case in Java //
when (option) {
"1" -> {
println("Hello World!\n")
}
"2" -> {
println("Enter a number: ")
num = readLine().toString()
println("Your number is: " + num + "\n")
}
"3" -> {
println("\nClosing program...")
}
else -> {
println("\nInvalid option!\n")
}
}
}
答案 1 :(得分:2)
when 定义具有多个分支的条件表达式。它类似于类 C 语言中的 switch 语句。它的简单形式看起来像这样。
when (x) {
1 -> print("x == 1")
2 -> print("x == 2")
else -> { // Note the block
print("x is neither 1 nor 2")
}
}
when 将其参数依次与所有分支匹配,直到满足某个分支条件。
when 既可以用作表达式,也可以用作语句。如果用作表达式,则第一个匹配分支的值将成为整个表达式的值。如果用作语句,则忽略各个分支的值。就像 if 一样,每个分支都可以是一个块,它的值就是块中最后一个表达式的值。
import java.util.*
fun main(args: Array<String>){
println("Hello World");
println("Calculator App");
val scan=Scanner(System.`in`);
println("""
please choose Your Selection to perform
press 1 for addition
press 2 for substraction
press 3 for multipication
press 4 for divider
press 5 for divisible
""");
val opt:Int=scan.nextInt();
println("Enter first Value");
val v1=scan.nextInt();
println("Enter Second Value");
val v2=scan.nextInt();
when(opt){
1->{
println(sum(v1,v2));
}
2->{
println(sub(v1,v2));
}
3->{
println(mul(v1,v2));
}
4->{
println(quotient(v1,v2));
}
5->{
println(reminder(v1,v2));
}
else->{
println("Wrong Input");
}
}
}
fun sum(n1:Int,n2:Int):Int{
return n1+n2;
}
fun sub(n1:Int, n2:Int):Int{
return n1-n2;
}
fun mul(n1:Int ,n2:Int):Int{
return n1*n2;
}
fun quotient(n1:Int, n2:Int):Int{
return n1/n2;
}
fun reminder(n1:Int, n2:Int):Int{
return n1%n2;
}
答案 2 :(得分:1)
答案 3 :(得分:1)
当Expression何时替换类C语言的switch运算符。 以最简单的形式看起来像这样
when (x) {
1 -> print("x == 1")
2 -> print("x == 2")
else -> { // Note the block
print("x is neither 1 nor 2")
}
}
依次将其参数与所有分支匹配时,直到一些 满足分支条件。什么时候可以用作 表达或陈述。如果将其用作表达式,则 满意分支的价值变成整体的价值 表达。如果将其用作语句,则各个值 分支将被忽略。 (就像是否,每个分支可以是一个块, 并且它的值是该块中最后一个表达式的值。)
答案 4 :(得分:1)
switch
在Kotlin中实际上是when
。但是,语法不同。
when(field){
condition -> println("Single call");
conditionalCall(field) -> {
print("Blocks");
println(" take multiple lines");
}
else -> {
println("default");
}
}
以下是不同用途的示例:
// This is used in the example; this could obviously be any enum.
enum class SomeEnum{
A, B, C
}
fun something(x: String, y: Int, z: SomeEnum) : Int{
when(x){
"something" -> {
println("You get the idea")
}
else -> {
println("`else` in Kotlin`when` blocks are `default` in Java `switch` blocks")
}
}
when(y){
1 -> println("This works with pretty much anything too")
2 -> println("When blocks don't technically need the variable either.")
}
when {
x.equals("something", true) -> println("These can also be used as shorter if-statements")
x.equals("else", true) -> println("These call `equals` by default")
}
println("And, like with other blocks, you can add `return` in front to make it return values when conditions are met. ")
return when(z){
SomeEnum.A -> 0
SomeEnum.B -> 1
SomeEnum.C -> 2
}
}
除switch
编译为一系列的if语句外,大多数编译为when { ... }
。
但对于大多数用途,如果使用when(field)
,它将编译为switch(field)
。
但是,我确实要指出,switch(5)
带有一堆分支只是浪费时间。 5始终为5。如果您使用switch
,if语句或其他任何逻辑运算符,则应使用变量。我不确定代码只是一个随机示例还是实际代码。我要指出的是后者。
答案 5 :(得分:0)
在 kotlin
中,开关盒非常灵活when(x){
2 -> println("This is 2")
3,4,5,6,7,8 -> println("When x is any number from 3,4,5,6,7,8")
in 9..15 -> println("When x is something from 9 to 15")
//if you want to perform some action
in 20..25 -> {
val action = "Perform some action"
println(action)
}
else -> println("When x does not belong to any of the above case")
}
答案 6 :(得分:0)
下面是一个示例,该示例知道对任意对象使用“何时”,
VehicleParts 是具有四种类型的枚举类。
混合是一种接受两种VehicleParts类的方法。
setOf(p1,p2)-表达式可以产生任何对象
setOf 是kotlin标准库函数,用于创建包含对象的Set。
集合是项的顺序无关紧要的集合。 允许Kotlin组合不同的类型以获得多个值。
当我通过VehicleParts.TWO和VehicleParts.WHEEL时,我得到了“自行车”。 当我通过VehicleParts.FOUR和VehicleParts.WHEEL时,得到的是“汽车”。
示例代码
enum class VehicleParts {
TWO, WHEEL, FOUR, MULTI
}
fun mix(p1: VehicleParts, p2: VehicleParts) =
when (setOf(p1, p2)) {
setOf(VehicleParts.TWO, VehicleParts.WHEEL) -> "Bicycle"
setOf(VehicleParts.FOUR, VehicleParts.WHEEL) -> "Car"
setOf(VehicleParts.MULTI, VehicleParts.WHEEL) -> "Train"
else -> throw Exception("Dirty Parts")
}
println(mix(VehicleParts.TWO,VehicleParts.WHEEL))
答案 7 :(得分:0)
val operator = '+'
val a = 6
val b = 8
val res = when (operator) {
'+' -> a + b
'-' -> a - b
'*' -> a * b
'/' -> a / b
else -> 0
}
println(res);
我们将以下代码用于常见条件
val operator = '+'
val a = 6
val b = 8
val res = when (operator) {
'+',
'-' -> a - b
'*',
'/' -> a / b
else -> 0
}
println(res);