Kotlin入门:程序的逻辑控制——03

一、程序的逻辑控制

        程序的执行语句主要分为3种:顺序语句、条件语句和循环语句。

二、if条件语句

        if表达式在Kotlin中用于根据条件执行不同的代码块。它有两种形式:普通if带返回值的if。

 普通if语句:

        普通的if语句由关键字if、一个布尔表达式和一个代码块组成。如果布尔表达式为true,则执行代码块;否则,跳过代码块。

val x = 10
if (x > 5) {println("x大于5")
} else {println("x小于等于5")
}

带返回值的if表达式: 

        带返回值的if表达式可以用来简化代码。它由关键字if、一个布尔表达式、一个返回值(true分支)和一个返回值(false分支)组成。它会根据布尔表达式的结果返回相应的值。

val x = 10
val result = if (x > 5) "x大于5" else "x小于等于5"
println(result)

函数中带返回的if: 

fun largerNumber(num1: Int, num2: Int) = if (num1 > num2) num1 else num2

三、when表达式: 

         when表达式类似于switch语句,可以根据不同的条件执行不同的代码块。它有两种形式:普通when带返回值的when。语法为:匹配值 -> { 执行逻辑 }

 普通when语句:

         普通的when语句由关键字when、一个待匹配的值和多个分支组成。每个分支包含一个或多个值,当待匹配的值与分支中的值之一相等时,执行对应的代码块。

val x = 2
when (x) {1 -> println("x等于1")2 -> println("x等于2")else -> println("x不等于1和2")
}

带返回值的when表达式:

        带返回值的when表达式可以用来简化代码。它由关键字when、一个待匹配的值和多个分支组成。每个分支包含一个或多个值,并且可以有一个特殊的分支else,用于处理其他未匹配的情况。 

fun getScore(name: String) = when (name) {"Tom" -> 86"Jim" -> 77"Jack" -> 95"Lily" -> 100else -> 0
}

类型匹配:

fun checkNumber(num: Number) {when (num) {is Int -> println("number is Int")is Double -> println("number is Double")else -> println("number not support")}

        上述代码中,is关键字就是类型匹配的核心,它相当于Java中的instanceof关键字。

不在when语句中传入参数:

fun getScore(name: String) = when {name == "Tom" -> 86name == "Jim" -> 77name == "Jack" -> 95name == "Lily" -> 100else -> 0
}

         注意,Kotlin中判断字 符串或对象是否相等可以直接使用==关键字,而不用像Java那样调用equals()方法。

 其他用法:

        假设所有名字以Tom开头的人,他的分数都是86分,这种场景如果用带参数的when语句 来写就无法实现,而使用不带参数的when语句就可以这样写,现在不管你传入的名字是Tom还是Tomy,只要是以Tom开头的名字,他的分数就是86分。 

fun getScore(name: String) = when {name.startsWith("Tom") -> 86name == "Jim" -> 77name == "Jack" -> 95name == "Lily" -> 100else -> 0
}

四、 循环语句

        kotlin的循环语句有for循环、while循环和do-while循环。

for循环:

从集合或数组中迭代: 

        for循环用于对一个集合或者数组进行迭代,逐个处理其中的元素。它的基本语法如下:

val numbers = arrayOf(1, 2, 3, 4, 5)
for (number in numbers) {println(number)
}

        在上述例子中,我们遍历了一个整数数组,并将每个元素打印出来。 

Range来指定循环:

        val range = 0..10的范围就是[0, 10]。

fun main() {for (i in 0..10) {println(i)}
}

使用for-in循环遍历区间:

        val range = 0 until 10 ,它的数学表达方式是[0, 10)。口诀:左闭右开

fun main() {for (i in 0 until 10) {println(i)}
}

结合step函数来指定循环的步长:

fun main() {for (i in 0 until 10 step 2) {println(i)}
}

downTo 关键字:

fun main() {for (i in 10 downTo 1) {println(i)}
}

           这里我们创建了一个[10, 1]的降序区间。

while循环和do-while循环: 

        while循环和do-while循环用于根据条件重复执行一段代码块。

        while循环会先检查条件是否为true,如果是则执行代码块,然后再次检查条件。如果条件为false,则跳过代码块。

var i = 0
while (i < 5) {println(i)i++
}

        do-while循环首先执行一次代码块,然后再检查条件。只有在条件为true时才会继续执行。 

var i = 0
do {println(i)i++
} while (i < 5)

        上述两个例子中,我们通过循环输出了0到4的数字。 

 五、控制循环流程:

Kotlin提供了几个控制循环流程的关键字:

  • continue:用于跳过循环的当前迭代,直接进入下一次迭代。
  • break:用于完全退出循环,不再执行后续的迭代。
  • return:用于完全退出函数或者匿名函数,不再执行后续的代码。

        通过这些关键字可以在循环中灵活使用,根据需要来控制循环的行为。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/35689.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

电脑合上盖子无线网络不会断开

控制面板\硬件和声音\电源选项\系统设置 最终选择不会采取任何操作 选择不会采取任何操作

前端性能优化之性能优化的指标和工具(chrome devtools、lighthouse、webpagetest)

文章目录 引言一、为什么要进行web性能优化二、RAIL测量模型1. 什么是RAIL2. 性能测量工具 三、性能测量工具的使用和性能指标以及优化目标1. Chrome DevTools1. 打开调试工具方式和配置2. network下的几个性能指标1. requests 请求总数2. transferred实际从服务器下载的数据量…

【数据结构与算法】十大经典排序算法-希尔排序

&#x1f31f;个人博客&#xff1a;www.hellocode.top &#x1f3f0;Java知识导航&#xff1a;Java-Navigate &#x1f525;CSDN&#xff1a;HelloCode. &#x1f31e;知乎&#xff1a;HelloCode &#x1f334;掘金&#xff1a;HelloCode ⚡如有问题&#xff0c;欢迎指正&#…

手撕数据结构之栈+例题

目录 一、栈的概念及结构 二、栈的头文件及基本框架 三、接口实现 1、对栈的初始化 2、栈的销毁 3、入栈操作 4、出栈操作 5、判断栈是否为空 6、返回栈顶元素 7、遍历栈 四、有效的括号 - 力扣&#xff08;LeetCode&#xff09; 题目描述&#xff1a; 思路&#xff…

静态网页和动态网页区别

1&#xff0c;静态网页和动态网页有何区别 1) 更新和维护 静态网页内容一经发布到网站服务器上&#xff0c;无论是否有用户访问&#xff0c;这些网页内容都是保存在网站服务器上的。如果要修改网页的内容&#xff0c;就必须修改其源文件&#xff0c;然后重新上传到服务器上。…

k8s-----集群调度

目录 一&#xff1a;调度约束 二&#xff1a;Pod 启动创建过程 三&#xff1a;k8s调度过程 1、Predicate 有一系列的常见的算法 2、常见优先级选项 3、指定调度节点 &#xff08;1&#xff09;nodeName指定 &#xff08;2&#xff09;nodeSelector指定 四&#xff1a;亲和…

【SA8295P 源码分析】68 - Android 侧用户层 输入子系统获取 /dev/input/event0 节点数据 代码流程分析

【SA8295P 源码分析】68 - Android 侧用户层 输入子系统获取 /dev/input/event0 节点数据 代码流程分析 一、EventHub.cpp 监听 /dev/input/event0 节点流程二、EventHub.cpp 读取 /dev/input/event0 节点数据流程系列文章汇总见:《【SA8295P 源码分析】00 - 系列文章链接汇总…

C++——继承

文章目录 &#x1f99c;1. 什么是继承&#x1f40a;1.1 概念&#x1f40a;1.2 格式&#x1f40a;1.3 继承方式 & 访问限定符 &#x1f426;2. 派生类和基类的赋值问题&#x1f9a9;3. 派生类和基类同名成员问题&#x1f413;4.派生类默认成员函数&#x1f409;4.1 构造函数…

React源码解析18(1)------ React.createElement 和 jsx

1.React.createElement 我们知道在React17版本之前&#xff0c;我们在项目中是一定需要引入react的。 import React from “react” 即便我们有时候没有使用到React&#xff0c;也需要引入。原因是什么呢&#xff1f; 在React项目中&#xff0c;如果我们使用了模板语法JSX&am…

使用OkHttp发送POST请求的几种方式

使用OkHttp发送POST请求的几种方式 介绍pom依赖基本的POST请求带授权的POST请求POST方式发送JSON数据Multipart POST 请求 介绍 本文将介绍 OkHttp 客户端的基本用法。 主要介绍 OkHttp 3.x 版本中发送Post请求的几种方式。 pom依赖 <dependency><groupId>com.sq…

单调递增的数字——力扣738

文章目录 题目描述解法题目描述 解法 #include<iostream> #include<string>using namespace std;int monotoneIncreasingDigits

【学习】若依源码(前后端分离版)之 “ 异常处理”

大型纪录片&#xff1a;学习若依源码&#xff08;前后端分离版&#xff09;之 “ 异常处理” 前言1、统一返回实体定义2、定义登录异常定义3、基于ControllerAdvice注解的Controller层的全局异常统一处理4、测试访问请求结语 前言 通常一个web框架中&#xff0c;有大量需要处理…

中小企业项目管理软件推荐:选择适合的工具提升项目效率!

中小企业项目管理软件有哪些&#xff1f;Zoho Projects是一款好用无广告的项目管理软件。当个小创业者是真的不容易&#xff0c;不仅要管理团队&#xff0c;还要管理团队项目。很多团队之前用了好多项目管理的软件&#xff0c;但是都不太满意。但是如果你经常参加创业者聚会上&…

常见的路由协议之RIP协议与OSPF协议

目录 RIP OSPF 洪泛和广播的区别 路由协议是用于在网络中确定最佳路径的一组规则。它们主要用于在路由器之间交换路由信息&#xff0c;以便找到从源到目标的最佳路径。 常见的路由协议&#xff1a; RIP (Routing Information Protocol)&#xff1a;RIP 是一种基于距离向量算…

Mac os 上的apt-get install 就是brew install

Mac os 上面不支持apt-get install ,但是有个 brew install可以代替。 Homebrew是Mac OS的包管理器&#xff0c;可以方便地安装各种需要的软件。 1.1 安装Homebrew 如果没有安装Homebrew&#xff0c;需要在终端输入以下命令进行安装&#xff1a; /usr/bin/ruby -e "$(…

使用wxPython和PyMuPDF在Python中显示PDF目录的实现

展示如何使用wxPython和PyMuPDF库在Python中选择PDF文件并将目录显示在列表框中。 简介&#xff1a; 在本篇教程中&#xff0c;我们将学习如何使用wxPython和PyMuPDF库在Python中选择PDF文件&#xff0c;并将其目录显示在一个列表框中。这将使用户能够方便地浏览PDF文档的目录…

c#实现设配器模式

下面是一个使用C#实现适配器模式的示例代码&#xff1a; using System;// 目标接口 public interface ITarget {void Request(); }// 目标类 public class Target : ITarget {public void Request(){Console.WriteLine("目标类的请求");} }// 需要适配的类 public c…

Golang 局部变量、全局变量 声明

文章目录 一、局部变量二、全局变量 一、局部变量 四种声明方式 多变量声明&#xff1a; package mainimport "fmt"//局部变量声明 func main() {//方法一: 声明一个变量和数据类型&#xff0c;不初始化值&#xff1b;默认值为0&#xff1b;var lvA intfmt.Printl…

【MybatisPlus】LambdaQueryWrapper和QueryWapper的区别

个人主页&#xff1a;金鳞踏雨 个人简介&#xff1a;大家好&#xff0c;我是金鳞&#xff0c;一个初出茅庐的Java小白 目前状况&#xff1a;22届普通本科毕业生&#xff0c;几经波折了&#xff0c;现在任职于一家国内大型知名日化公司&#xff0c;从事Java开发工作 我的博客&am…

可视化应用:提升教育领域的学习与理解

在教育领域&#xff0c;可视化应用作为一种强大的工具&#xff0c;已经开始发挥着重要的作用。通过将抽象的概念和复杂的数据转化为直观的图形和图表&#xff0c;可视化应用能够提升学生的学习效果和理解能力。本文将探讨可视化应用在教育领域中的重要性&#xff0c;以及它在不…