如何在Kotlin中实现开关盒

May*_*bhi 21 android kotlin

如何switch在Kotlin中实现大小写,我们可以在Kotlin中替换java的开关大小写代码吗?我想要Kotlin中的这段代码

switch (5){
            case 1:
                // Do code
                break;
            case 2:
                // Do code
                break;
            case 3:
                // Do code
                break;
        }
Run Code Online (Sandbox Code Playgroud)

Zoe*_*Zoe 22

switch在 Java 中实际上是when在 Kotlin 中。但是,语法不同。

when(field){
    condition -> println("Single call");
    conditionalCall(field) -> {
        print("Blocks");
        println(" take multiple lines");
    }
    else -> {
        println("default");
    }
}
Run Code Online (Sandbox Code Playgroud)

以下是不同用途的示例:

// 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
    }
}
Run Code Online (Sandbox Code Playgroud)

其中大部分编译为switch,除了when { ... },编译为一系列 if 语句。

但是对于大多数用途,如果您使用when(field),它会编译为switch(field).

但是,我确实想指出,switch(5)使用一堆分支只是浪费时间。5 始终为 5。如果您使用switch、if 语句或任何其他逻辑运算符,则应使用变量。我不确定该代码是只是一个随机示例还是实际代码。如果是后者,我会指出这一点。


nav*_*ver 18

您可以这样:

when (x) {
    1 -> print("x == 1")
    2 -> print("x == 2")
    else -> { // Note the block
        print("x is neither 1 nor 2")
    }
}
Run Code Online (Sandbox Code Playgroud)

官方帮助中提取


小智 16

when 定义具有多个分支的条件表达式。它类似于类 C 语言中的 switch 语句。它的简单形式如下所示。

   when (x) {
    1 -> print("x == 1")
    2 -> print("x == 2")
    else -> { // Note the block
        print("x is neither 1 nor 2")
    }
}
Run Code Online (Sandbox Code Playgroud)

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;
}
Run Code Online (Sandbox Code Playgroud)


Him*_*arg 15

kotlin 中的 switch case 非常灵活

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")

}
Run Code Online (Sandbox Code Playgroud)


小智 7

当Expression替换类C语言的switch运算符时。以最简单的形式看起来像这样

when (x) {
    1 -> print("x == 1")
    2 -> print("x == 2")
    else -> { // Note the block
        print("x is neither 1 nor 2")
    }
}
Run Code Online (Sandbox Code Playgroud)

when依次将其参数与所有分支匹配,直到满足某些分支条件。when可以用作表达式或语句。如果将其用作表达式,则满足的分支的值将成为整个表达式的值。如果将其用作语句,则忽略各个分支的值。(与if一样,每个分支可以是一个块,其值是该块中最后一个表达式的值。)


小智 7

在 kotlin 中,它们没有 switch-case 语句。但我们有when类似于 switch 的表达式\xef\xbb\xbf。就像 if-else 或 switch 一样,首先检查所有条件,如果没有匹配,则评估 else 代码。

\n
when (n) {\n    1 -> {\n        print("First")\n        // run your code\n    }\n    2 -> print("Second")\n    3, 4 -> print("Third or Forth") // check multiple conditions for same code\n    in 1..100 -> print("Number is in the range")\n    else -> {\n        print("Undefined")\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

开关盒不需要任何中断。

\n


Gra*_*our 6

只需使用when关键字。如果你想做一个循环,你可以这样做:

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")
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)


Dia*_*ani 5

        val operator = '+'
        val a = 6
        val b = 8

        val res = when (operator) {
            '+' -> a + b
            '-' -> a - b
            '*' -> a * b
            '/' -> a / b
            else -> 0
        }
        println(res);
Run Code Online (Sandbox Code Playgroud)

对于常见条件,我们使用以下代码

        val operator = '+'
        val a = 6
        val b = 8

        val res = when (operator) {
            '+',
            '-' -> a - b
            '*',
            '/' -> a / b
            else -> 0
        }
        println(res);
Run Code Online (Sandbox Code Playgroud)