如何在Kotlin中实现开关盒

时间:2018-11-04 05:58:58

标签: android kotlin

如何在Kotlin中实现开关案例,是否可以在Kotlin中替换java的开关案例代码?我想要在Kotlin中使用此代码

switch (5){

            case 1:
                // Do code
                break;
            case 2:
                // Do code

                break;
            case 3:
                // Do code

                break;


        }

8 个答案:

答案 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)

您可以这样:

$.notify(data,"info")

摘自Singleton

答案 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)

Java中的

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