Kotlin条件控制及循环

Kotlin语言的循环实现 Kotlin提供了灵活且强大的循环结构,使我们可以轻松地处理重复任务。通过for循环、while循环和do-while循环,我们可以以多种方式实现相同的逻辑。在使用循环时,记得遵循最佳实践,以提高代码质量。在实际的开发中,循环不仅用于遍历数据结构,还可以结合Kotlin的其他特性,如集合操作和高阶函数,使得代码更加优雅和简洁。希望本文能够帮助您深入理解Kotlin中的循环实现,并在实际应用中灵活运用。 阅读详情

Kotlin 的逻辑控制

程序的执行语句主要分为3种:顺序语句、条件语句和循环语句。顺序语句很好理解,就是代码一行一行地往下执行就可以了,但是这种执行方式在很多情况下并不能满足我们的编程需求,这时就需要引入条件语句和循环语句了。

条件控制

if条件语句

Kotlin中的条件语句主要有两种实现方式:if和when。

一个 if 语句包含一个布尔表达式和一条或多条语句。

fun largerNumber(num1: Int, num2: Int): Int {
	var value = 0
  	if (num1 > num2) {
 		value = num1
 	} else {
 		value = num2
 	}
 	return value
}

从上面的示例中可以看出Kotlin中的if用法和Java中基本上是一样的。但是Kotlin中的if语句相比于Java有一个额外的功能,它是可以有返回值的,返回值就是if语句每一个条件中最后一行代码的返回值。因此,上述代码就可以简化成如下形式:

fun largerNumber(num1: Int, num2: Int): Int {
 	val value = if (num1 > num2) {
 		num1
 	} else {
 		num2
 	}
 	return value
}

由于没有重新赋值的情况了,因此可以使用val关键字来声明value变量,最

终将value变量返回。而且value其实也是一个多余的变量,我们可以直接将if语句返回,这样代码将会变得更加精简,如下所示:

fun largerNumber(num1: Int, num2: Int): Int {
   return if (num1 > num2) {
 		num1
 	} else {
 		num2
 	}
}

或者直接写成一行, 返回值类型可以自动推导出来,所以也可以省略:

fun largerNumber(num1: Int, num2: Int) = if (num1 > num2) num1 else num2
when表达式

在条件分支变得很多的时候, 使用if语句就会产生大量的冗余代码, 而且if语句也有一定的局限性,这时就需要使用when表达式了。

Kotlin中的when语句有点类似于Java中的switch语句,但它又远比switch语句强大得多。 Java中的switch语句并不怎么好用。

首先,switch只能传入整型或短于整型的变量作为条件,JDK 1.7之后增加了对字符串变量的支持,如果不是这几种类型的变量,则不能使用switch。

其次,switch中的每个case条件都要在最后主动加上一个break,否则执行完当前case之后会依次执行下面的case,这一特性可能导致许多奇怪的bug,就是因为有人忘记添加break,执行了多余的case语句。

而Kotlin中的when语句不仅解决了上述痛点,还增加了许多更为强大的新特性。when运行原理就是将它的参数依次和所有的分支条件顺序比较,直到某个分支满足条件,when语句允许传入一个任意类型的参数,可以是具体的值或某个类型;而when的分支条件语句可以是判断某个具体的值、或着是判断是否为某个类型、或者是判断是否在某个区间。当所有分支语句都不满足时,可以使用一个else语句执行匹配失败的流程,类似于Java的switch中的default语句。

下面是一个完整的示例:

when (x) {
    1 -> print("x == 1")
    2 -> print("x == 2")
    is String -> print("x是一个string")
  	in 1..4 -> print("在1到4之间")
    else -> {
        print("x 不是 1 ,也不是 2")
    }
}

when语句的基本用法就是这些,但其实when语句还有一种不带参数的用法,虽然这种用法可能不太常用,但有的时候却能发挥很强的扩展性。这种用法是将判断的表达式完整地写在when的结构体当中。如下所示:

when {
    x == 1 -> print("x == 1")
    x == 2 -> print("x == 2")
    x is String -> print("x是一个string")
  	x in 1..4 -> print("在1到4之间")
    else -> {
        print("x 不是 1 ,也不是 2")
    }
}

循环控制

Java中主要有两种循环语句:while循环和for循环。而Kotlin也提供了while循环和for循环,其中while循环不管是在语法还是使用技巧上都和Java中的while循环没有任何区别,而Kotlin在for循环方面做了很大幅度的修改,Java中最常用的for-i循环在Kotlin中直接被舍弃了,而Java中另一种for-each循环则被Kotlin进行了大幅度的加强,变成了for-in循环,在了解for-in循环之前,需要先了解一下kotlin区间的概念。

区间

kotlin中可以使用.. 、until 、 downTo表示一个区间范围, ..和until是从小到大,downTo是从大到小。

.. 表示两个端点都在区间的升序闭区间,如:

val range = 0..5

range的取值范围为: 0 1 2 3 4 5.

until 表示左闭右开升序区间,如:

val range = 0 until 5

range的取值范围为: 0 1 2 3 4.

downTo 表示两个端点都在区间的降序闭区间,如:

val range = 0 downTo 5

range的取值范围为: 5 4 3 2 1 0.

for-in循环

默认情况下,for-in循环每次执行循环时会在区间范围内递增1或递减1,相当于Java for-i循环中的i++或i–效果,而如果要跳过其中的一些元素,可以使用step关键字:step表示步长,默认step为1,现在给step设置为2,如下示例

for (i in 1..6 step 2) {
	...
}

i的取值范围为: 1 3 5.

for-in循环除了可以对区间进行遍历之外,还可以用于遍历数组和集合,下面是一些for-in循环示例:

val items = listOf("实", "力", "K", "O")
//实力KO
for (item in items) {
	print(items.get(item))
}

//实力KO
for (index in items.indices) {
	print(items.get(index))
}

//实力KO
for ((index, value) in items.withIndex()) {
	print(value)
}

//实力KO
items.forEach {
	print(it)
}
while循环

while循环和Java中的while循环一样, 语法如下:

while (条件) {
	执行逻辑
}

当满足条件时就会执行结构体中的逻辑,然后再次执行判断条件,直到不满足条件才结束while循环,如下示例:

val items = listOf("实", "力", "K", "O")
var index = 0
while (index < items.size) {
	print(items.get(index))
	index++
}
//当index小于items的size时, 执行index++,一直到index=items.size时结束

同Java一样,kotlin也支持do while循环,语法如下:

do {
	执行逻辑
} while (条件)

do while循环与上面的while循环的区别在于do while循环会先执行一次结构体中的逻辑,然后再判断条件是否满足进行下一次循环, 而while循环是先判断条件是否满足再执行逻辑,所以do while循环至少会执行一次结构体逻辑, 而while至少执行0次结构体逻辑。

跳出循环

Kotlin 有三种结构化跳转表达式:

  • return, 默认从最直接包围它的函数或者匿名函数返回。
  • break, 终止最直接包围它的循环。
  • continue, 继续下一次最直接包围它的循环。

在 Kotlin 中任何表达式都可以用标签(label)来标记。 标签的格式为标识符后跟 @ 符号,例如:abc@、fooBar@

loop@ for (i in 1..100) {
    for (j in 1..100) {
        if (……) break@loop
    }
}

标签限制的 break 跳转到刚好位于该标签指定的循环后面的执行点。 continue 继续标签指定的循环的下一次迭代.

Kotlin基础入门 - for、forEach 循环 不论身处何方 for循环这种操作都随处可见,鉴于大多数Android开发都是从Java转到Kt的,所以我的思路是从Java的使用习惯来讲一些Kt 的for、forEach 循环方式 阅读详情

相关推荐

别再手动改颜色了!用这个Word宏,一键搞定Zotero参考文献超链接的蓝色样式

本文介绍如何利用Word宏一键修改Zotero参考文献的超链接颜色,解决手动调整的繁琐问题。通过详细的VBA代码解析和高级定制方案,帮助科研人员快速实现文献引用的自动化格式优化,提升论文排版效率。特别适合需要批量处理APA等标准格式蓝色超链接的用户。

weixin_30875157的博客 514

Kotlin For循环详解

前言 从今年的4月开始入手Kotlin到现在也有几个月时间了,在Kotlin当中循环算是这个语言当中的一个特点,最近Android上用Canvas在做游戏开发,循环也是写的非常多,发现在编写多变量的For循环无从下手,最后要不就是用Java写Kotlin调用,要不就是用While循环写,终于在今天我是解决了这个痛点,所以就打算写篇文章记录一下。 基本使用 在正式学习之前咱们先从最简单的For循环开始 从0循环到100 until关键字 until关键字在使用时左侧和右侧都需要一个数值,until循环是一个左

SanSanOtaku的博客 5万+

伺服电机开发实战指南

伺服电机作为工业自动化的核心部件,正经历前所未有的技术革新。本文从基础原理出发,详细介绍了伺服电机的分类、工作原理和特性,分析了伺服电机系统组成与核心部件,探讨了企业级开发技术,包括控制算法、通信协议和故障诊断等高级功能,并提供了实战案例分析,从行业应用到具体开发步骤,展示了伺服电机的工程实现。通过深入理解伺服电机的原理、掌握开发技术、学习应用案例,可以实现伺服系统的高性能开发与应用。

全栈 1676

【Kotlin -- 知识点】循环控制

循环控制语句也是每门语言不可缺少的一部分,Java 中主要有两种循环语句:while 循环和 for 循环。Kotlin 循环其实几乎和 Java 一模一样。

Kevin Learn Android 1552

PostgreSQL+PostGIS空间数据入库实战:从矢量栅格到GeoServer发布全流程

本文详细介绍了将矢量与栅格空间数据导入PostgreSQL并利用PostGIS扩展进行管理的完整流程。内容涵盖环境搭建、使用shp2pgsql和raster2pgsql工具进行数据入库、基础空间查询验证,以及最终通过GeoServer发布为地图服务的实战步骤,为构建空间数据平台提供清晰指引。

weixin_29268267的博客 289

大白话讲解Numpy中什么是一维、二维、三维数组,以及5种创建方式

NumPy中提供了多种创建数组的方式,其中最基本的方式就是通过array()函数创建数组在使用该函数时直接传入列表或元组即可。 通过array()函数分别创建一维数组、二维组和三维数组,那么什么是维度呢?一维、二维、三维有什么区别? 1、什么是维度? 维度可以理解为描述数据的一种 “方向” 或者 “层次”。在数组中,维度的数量决定了我们需要用多少个索引来访问一个元素 2、一维、二维、三维的区别? (1)一维:一维数组就像是一条直线上排列的一组数据,例如: a = np.array([1, 2

1361

Kotlin 二 条件控制与循环

Kotlin 二 一Kotlin 条件控制 if语句 一个 if 语句包含一个布尔表达式和一条或多条语句。 // 传统用法 var max = a if (a < b) max = b // 使用 else var max: Int if (a > b) { max = a } else { max = b } /...

weixin_30622181的博客 318

auto.js梦幻西游游戏脚本,梦幻西游脚本开发思路

本篇文章给大家谈谈梦幻西游脚本用什么语言写,以及auto.js梦幻西游游戏脚本,希望对各位有所帮助,不要忘了收藏本站喔。

npy199331的博客 1939

Kotlin语法快速入门--条件控制和循环语句(2)

就像上述代码,想在it == 5的时候执行跳出循环 ,但是这个时候无法直接跳出循环,因为其底层是使用lamda表达式和函数实现的,即无法使用关键字break,continue。解释:首先,break或者continue会优先执行的语句段是距离关键字(break或者continue)最近的循环关键字,所以上述代码中break的是j所在的for。像这段,就可以指定a@…,其会返回一个对象,有下标index,和值i,可以通过kotlin的一个。:获取下一个元素的值,就像有一个指针,指向下一个值,并获取。

m0_63144319的博客 1085

Ubuntu系统等保3级配置核查与加固

虽然这种方法在某些老旧的系统中仍然有效,但现代Linux发行版通常不推荐使用hosts.deny和hosts.allow文件来管理防火墙规则,因为它们的功能已经被更现代的防火墙管理工具(如iptables或firewalld)所取代。如果你想禁止特定的环境变量,可以从这个列表中移除它们,或者如果你想完全阻止所有环境变量的传递,可以将其设置为空。你可以通过ssh-keygen生成密钥对,并将公钥添加到用户的~/.ssh/authorized_keys文件中。修改配置后,需要重启SSH服务以使更改生效。

悦分享 183

Claude Code Cli 源码泄露事件全解析:从51万行代码中拆解AI Agent的记忆护城河

2026年3月,Anthropic的AI编程助手Claude Code意外泄露51万行核心代码,暴露了其多Agent架构、六级权限验证系统及创新的记忆机制。记忆系统采用四层设计:用户自定义框架、自动记忆提取、智能上下文压缩和纯文件存储。最独特的是"自动做梦"功能,AI会定期整理记忆,类似人类睡眠记忆巩固。代码还揭示未发布功能如电子宠物系统,但也暴露权限系统漏洞和代码质量问题。这次泄露展现了AI助手核心技术的复杂性,特别是其记忆系统如何通过透明可编辑的设计建立用户信任。

program哲学 468

Android Kotlin 条件控制和循环控制(四)

一、前言: 今天真的很苦,尽管偶尔会放肆一下、低落一下、发脾气一下、惆怅一下、对未来迷茫一下。但整体上,我是在持续的进步:虽然进步的很慢,被一些年轻有为的人甩在身后,但也把那些不努力的人甩在了身后。 愿你有坚持到底的决心,也有面对失败的勇气。 二、Kotlin 条件控制 1. IF 表达式 一个 if 语句包含一个布尔表达式和一条或多条语句。 var a = 5 var b = 8 // 传统用法...

weixin_39069034的博客 499

11、改进的加权轮询调度算法

本文详细介绍了对传统加权轮询(WRR)调度算法的改进方法,包括动态权重调整、优先级调度和预测机制,旨在提升系统的公平性、响应速度和适应性。通过设计与实现改进算法,并结合实验验证其在响应时间、资源利用率和公平性方面的显著提升,同时列举了该算法在数据中心、云服务平台、CDN及电商平台等实际场景中的应用案例。

day7的博客 190
上一篇: Kotlin中String的常用方法
下一篇: Kotlin集合与数组
Android开发猿
博客等级 码龄11年 72粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值