热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Kotlin快速入门(三)——流程控制

流程控制与Java基本类似,Kotlin提供了if和when两种分支语句,when可以替代

流程控制

与Java基本类似,Kotlin提供了ifwhen两种分支语句,when可以替代switch且功能更强大;Kotlin提供了whiledo whilefor-in循环,抛弃了Java普通for循环;Kotlin同样支持breakcontinue来控制循环。

1. 分支结构

  1. if分支语句

    与Java一致。

  2. if表达式

    Kotlin新功能,if作为表达式最终会返回一个值,因此可以代替Java的三目运算符。

    fun main(args: Array) {
    
        val age = 18
        val str = if (age > 20) "age大于20" else if (age 

    如果需要执行多行语句,可以使用{}包裹,但返回值要放在最后一行。

    fun main(args: Array) {
    
        val age = 18
        val str = if (age > 20) {
            println("大于20的分支")
            "age大于20"
        } else if (age 
  3. when分支语句

    • 替代Java中的switch语句。

      fun main(args: Array) {
          val score = 'B'
          when (score) {
              'A' -> println("优秀")
              'B' -> println("良好")
              'C' -> println("中")
              'D' -> println("及格")
              else -> println("不及格")
          }
      }
      

      如果需要执行多行语句,可以使用{}包裹。

    • when分支可以匹配多个值。

      fun main(args: Array) {
          val score = 'B'
          when (score) {
              'A', 'B' -> {
                  println("优秀")
                  println("戒骄戒躁")
              }
              'C', 'D' -> println("中")
              else -> {
                  println("不及格")
                  println("再接再厉")
              }
          }
      }
      
    • when分支后的值不要求是常量,可以是任意表达式。

      fun main(args: Array) {
          val score = 'B'
          val str = "EFGH"
          when (score) {
              str[0] - 4, str[1] - 4 -> {
                  println("优秀")
                  println("戒骄戒躁")
              }
              str[2] - 4, str[3] - 4 -> println("中")
              else -> {
                  println("不及格")
                  println("再接再厉")
              }
          }
      }
      
    • when分支对条件表达式的类型没有任何要求。

      fun main(args: Array) {
          val date = java.util.Date()
          when (date) {
              java.util.Date() -> {
                  println("优秀")
                  println("戒骄戒躁")
              }
              else -> {
                  println("不及格")
                  println("再接再厉")
              }
          }
      }
      

      只要when的条件表达式与某个分支的值通过==比较返回true,程序就可以执行该分支代码。

  4. when表达式

    fun main(args: Array) {
        val score = 'B'
        val str = when (score) {
            'A' -> {
                println("戒骄戒躁")
                "优秀"
            }
            'B' -> "良好"
            'C' -> "中"
            'D' -> "及格"
            else -> {
                println("再接再厉")
                "不及格"
            }
        }
        println(str)
    }
    
  5. when分支处理范围

    使用in!in运算符,处理范围。

    fun main(args: Array) {
        val age = java.util.Random().nextInt(100)
        println(age)
        val str = when (age) {
            in 90..100 -> {
                println("戒骄戒躁")
                "优秀"
            }
            in 80..89 -> "良好"
            in 70..79 -> "中"
            in 60..69 -> "及格"
            else -> {
                println("再接再厉")
                "不及格"
            }
        }
        println(str)
    }
    
  6. when分支处理类型

    使用is!is运算符,处理类型。

    fun main(args: Array) {
        val inputPrice = 26
        println(realPrice(inputPrice))
    }
    
    fun realPrice(inputPrice: Any) = when (inputPrice) {
        is String -> inputPrice.toDouble()
        is Int -> inputPrice.toDouble()
        is Double -> inputPrice
        else -> 0.0
    }
    
  7. when条件分支

    可以用来取代if...else if链,此时不需要为when分支提供任何表达式,每个分支条件都是一个布尔表达式,例如上面if表达式使用when条件分支代替。

    fun main(args: Array) {
    
        val age = 18
        // when分支不需要任何条件表达式
        val str = when {
            // 每个分支条件都是布尔表达式
            age > 20 -> {
                println("大于20的分支")
                "age大于20"
            }
            age  {
                println("小于20的分支")
                "age小于20"
            }
            else -> {
                println("等于20的分支")
                "age等于20"
            }
        }
        println(str)
    }
    

    再来一个,没有返回值的例子。

    fun main(args: Array) {
        // 读取一行输入,返回是String?类型,需要判断才能使用
        /*val ln = readLine()
        if (ln == null) {
            return
        }*/
        // 上面三行可以使用Elvis简化为一行
        val ln = readLine() ?: return
        when {
            ln.matches(Regex("\d+")) -> println("输入的全是数字")
            ln.matches(Regex("[a-zA-Z+]")) -> println("输入的全是字母")
            ln.matches(Regex("[a-zA-Z0-9]+")) -> println("输入的是字母和数字")
            else -> println("输入包含特殊字符")
        }
    }
    

2. 循环结构

  1. while循环

    与Java一致。注意如果while循环后面有一个分号(分号相当于一条空语句),此时while循环将只控制这条空语句作为循环。

  2. do while循环

    与Java一致。

  3. for-in循环

    用于遍历范围、序列、集合、数组中的元素。

    fun main(args: Array) {
    
        for (num in 1..5 step 2) {
            print("$num ") // 输出1 3 5
        }
    }
    

    for-in循环可以遍历任何可迭代对象。所谓可迭代对象就是该对象包含一个interator()的方法,且该方法的返回值对象具有next()hasNext()方法,这三个方法都使用operator修饰。

  4. 嵌套循环

    与Java一致。

3. 控制循环结构

  1. break结束循环

    与Java一致。

    使用@标识符,可以结束外层循环。

    fun main(args: Array) {
    
        outer@ for (i in 0 until 5) {
            for (j in 0 until 3) {
                println("i的值为:$i,j的值为:$j")
                if (j == 1) {
                    break@outer
                }
            }
        }
    }
    

    打印结果

    i的值为:0,j的值为:0
    i的值为:0,j的值为:1
    
  2. continue忽略本次,循环剩下的语句

    与Java一致。

    使用@标识符,可以忽略外层本次,循环外层剩下的语句。

    fun main(args: Array) {
    
        outer@ for (i in 0 until 2) {
            for (j in 0 until 3) {
                println("i的值为:$i,j的值为:$j")
                if (j == 1) {
                    continue@outer
                }
            }
        }
    }
    

    打印结果

    i的值为:0,j的值为:0
    i的值为:0,j的值为:1
    i的值为:1,j的值为:0
    i的值为:1,j的值为:1
    
  3. return结束方法

    与Java一致。

重点

  • if表达式
  • when语句和表达式

推荐阅读
  • Python循环语句代码逐行详解:while、for、break和continue
    来源:大数据DT本文约3200字,建议阅读9分钟循环语句是指重复执行同一段代码块,通常用于遍历集合或者累加计算。Python中的循环语句有 ... [详细]
  • 使用圣杯布局模式实现网站首页的内容布局
    本文介绍了使用圣杯布局模式实现网站首页的内容布局的方法,包括HTML部分代码和实例。同时还提供了公司新闻、最新产品、关于我们、联系我们等页面的布局示例。商品展示区包括了车里子和农家生态土鸡蛋等产品的价格信息。 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • 本文介绍了一个Java猜拳小游戏的代码,通过使用Scanner类获取用户输入的拳的数字,并随机生成计算机的拳,然后判断胜负。该游戏可以选择剪刀、石头、布三种拳,通过比较两者的拳来决定胜负。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • 猜字母游戏
    猜字母游戏猜字母游戏——设计数据结构猜字母游戏——设计程序结构猜字母游戏——实现字母生成方法猜字母游戏——实现字母检测方法猜字母游戏——实现主方法1猜字母游戏——设计数据结构1.1 ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
  • Java SE从入门到放弃(三)的逻辑运算符详解
    本文详细介绍了Java SE中的逻辑运算符,包括逻辑运算符的操作和运算结果,以及与运算符的不同之处。通过代码演示,展示了逻辑运算符的使用方法和注意事项。文章以Java SE从入门到放弃(三)为背景,对逻辑运算符进行了深入的解析。 ... [详细]
  • STL迭代器的种类及其功能介绍
    本文介绍了标准模板库(STL)定义的五种迭代器的种类和功能。通过图表展示了这几种迭代器之间的关系,并详细描述了各个迭代器的功能和使用方法。其中,输入迭代器用于从容器中读取元素,输出迭代器用于向容器中写入元素,正向迭代器是输入迭代器和输出迭代器的组合。本文的目的是帮助读者更好地理解STL迭代器的使用方法和特点。 ... [详细]
  • 本文整理了315道Python基础题目及答案,帮助读者检验学习成果。文章介绍了学习Python的途径、Python与其他编程语言的对比、解释型和编译型编程语言的简述、Python解释器的种类和特点、位和字节的关系、以及至少5个PEP8规范。对于想要检验自己学习成果的读者,这些题目将是一个不错的选择。请注意,答案在视频中,本文不提供答案。 ... [详细]
  • 很多时候在注册一些比较重要的帐号,或者使用一些比较重要的接口的时候,需要使用到随机字符串,为了方便,我们设计这个脚本需要注意 ... [详细]
  • 那你就是学的c语言,跟我学c语言
    本文目录一览:1、如何学习C语言?2、新手如何 ... [详细]
  • day04_流程控制
    流程控制在一个程序执行的过程中,各条语句的执行顺序对程序的结果是有直接影响的。也就是说,程序的流程对运行结果有直接的影响。所以,我们必须清楚每条语句的执行流程。而且,很多时候我们要 ... [详细]
  • Python教学练习二Python1-12练习二一、判断季节用户输入月份,判断这个月是哪个季节?3,4,5月----春 ... [详细]
author-avatar
阿魏空荡荡
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有