Kotlin编程循环控制示例详解
作者:南巷羽 发布时间:2022-06-02 11:53:54
本文总览
本篇来学习Kotlin循环结构的知识
1. While循环
while
循环用于重复迭代代码块,只要给定条件为 true就会执行一次循环代码块。若条件为 false,则直接跳过循环代码块执行后面代码。
while (x > 0) { x-- } // 当条件 x>0 成立,x 就会减一
do-while
循环 与 while
循环相类似,也可用于重复执行迭代代码块。但有差别的点是:它会先执行一次循环代码块,才检测条件是否满足,换句话说:它会至少执行一次 循环代码块。
do { val y = retrieveData() } while (y != null)
// 不管while 条件是否满足,都会先执行一次 y = retrieveData()
有时候会看到一些无限循环的示例,只要将条件语句设定为 true,就会一直循环执行 迭代代码块:
do {
// 循环代码块
}
while (true)
2. For循环
for
循环用于迭代或循环 数组,范围,集合等的元素,可以对任何提供迭代器(iterator)的对象进⾏遍历。它的语法格式:
for (item in collection) {// 逻辑处理}
⼀个成员函数或者扩展函数 iterator() 返回 Iterator<>
有⼀个成员函数或者扩展函数 next()
有⼀个成员函数或者扩展函数 hasNext() 返回 Boolean
可以用在数字区间上迭代,使用区间表达式
for (i in 1..3) { println(i) } // 逐个打印 区间[1,3]中的数字
遍历数组,同时打印出元素下标和元素值
for ((index, value) in array.withIndex()) { // 使用 库函数withIndex()
println("the element at $index is $value") // 逐个打印元素的下标和数值
}
forEach
语句:使用这个语句遍历数组或集合,比for
语句更加简便,语法形式如下:
调用者.forEach() {
println("it=${it}") // 逐个打印元素
}
日常开发中,结合实际业务场景来选取使用 for
还是 for-each
。
3. break和continue
在 Kotlin 中有三种结构化跳转表达式:
return 直接返回方法/函数的值,结束;
break 跳出本次循环,继续执行后面业务代码
continue 跳出本次循环,直接进入下一次循环
3.1 break语句
break
最常用在 java 中,常与与 switch
组成 switch-break 语句。但在 Kotlin 中没有switch这个语法,break
语句通常与 if
表达式 一起用:
for(n in 1..10){
if (n==5) {
break // 在 n = 5时跳出循环
}
}
与 if语句组合,一旦满足给定的条件时,就会终止本次循环。
3.2 continue语句
continue
用于跳过本次迭代并将控制流跳转到下一次迭代,通常与 if
表达式 一起使用,以跳过指定条件的当前循环。
for (n in 1..5){
...
if(n==2||n==4) {
continue // 只要满足上述条件,就会执行该语句跳出本次循环
}
...
}
其实 continue 在Java或者Kotlin用法是一样的,都很好理解和记住。
来源:https://juejin.cn/post/7133420899453108232


猜你喜欢
- 问题背景能准确说出下面的java 执行完毕后会打印出什么? System.out.println(
- 本文实例为大家分享了Android仿微信长按录制视频并播放功能的具体代码,供大家参考,具体内容如下一、点击按钮进行录制首先要获取摄像拍照的权
- 经典排序算法 - 冒泡排序Bubble sort原理是临近的数字两两进行比较,按照从小到大或者从大到小的顺序进行交换,这样一趟过去后,最大或
- 什么是二叉搜索树简单来说,就是方便搜索的二叉树,是一种具备特定结构的二叉树,即,对于节点n,其左子树的所有节点的值都小于等于其值,其右子树的
- 函数指针最近看android camera 的source ,发现大量的call back ,多线程,有必要对其中的基础 :函数指针复习一下
- 一、背景今天心血来潮,准备测试一下项目中 logback 的自动刷新功能,但是测试时发现并不生效。logback 的配置如下:<con
- 前言Zookeeper的通过快照日志和事务日志将内存信息保存下来,记录下来每次请求的具体信息。尤其是其事务日志,每次处理事务请求时都需要将其
- 前言在前面弹跳小球的基础上实现一个简单的飞机游戏,主要包括飞机的显示、控制移动、显示复杂图案、发射激光、打靶练习等功能。目前的飞机还很简单,
- 这一节我们先写一个简单点的Demo来测试易宝支付的流程,熟悉这个流程后,再做实际的开发,因为是一个Demo,所以我没有考虑一些设计模式的东西
- 场景点击第一个Activity中的按钮,启动第二个Activity,关闭第二个Activity,返回到第一个Activity。在第一个Act
- 1、创建控制台程序如上图所示,选择linux开发平台,我用的VS2019,.Net5.0,一直点下一步,创建。2、创建TCP服务端程序usi
- 此解决方案是针对window的,因为日志默认保存路径在C盘,linux忽略。学习RocketMQ过程中,总是出现com.alibaba.ro
- 一、传入dll前,在C#中申请内存空间c#里面的指针即 IntPtr申请如下:IntPtr SrcImgData = Marshal.All
- 本文实例讲述了java实现将结果集封装到List中的方法。分享给大家供大家参考,具体如下:import java.sql.Connectio
- 出现这种错误的原因可能是:1.本机默认使用(编译)的jdk与该项目所使用的jdk版本不同。2.jdk版本不适用于这个Idea,很典型的一个例
- 使用场景EntityListeners在jpa中使用,如果你是mybatis是不可以用的它的意义对实体属性变化的跟踪,它提供了保存前,保存后
- 在做android 开发时,在默认情况下当屏幕从竖评变到横屏时会触发 onConfigurationChanged 事件 在默认情况下会重新
- 前言: 之前安装了Ubuntu 18.04,结果在安装Codeblocks / VScode还是安装gcc,c/c++的时候出现了一堆错误(
- 本文简单介绍如何引入validation的步骤,如何通过自定义validation减少代码量,提高生产力。特别提及:非基本类型属性的vali
- 前言为什么要学SpringBoot和Mybatis呢,我觉得作为一个合格的后端程序员增删改查(CRUD)肯定是要会的,而且是最基本的一项技能