1、while循环

kotlin的whiledo-while与Java语法一致,这里简单看一下

while (condition) { //当条件为真时,代码体执行/*...*/
}
do {//无条件的执行一次,之后当条件为真时执行/*...*/
} while (condition)

2、for循环

for循环仅以一种形式存在,和java的for-each循环一致

Java

int[] data={1,2,3,4,5,6,7,8,9,10};for(int i:data){system.out,println("i");
}

Kotlin

for(i in 10){print(i)
}

3、数字迭代:区间和数列

kotlin中没有java的常规循环,所以kotlin使用了区间的概念

区间本质:两个值之间的间隔。这两个值通常是数字:一个是起始值,一个是结束值。使用 ..来表示

例:

val oneToTen = 1..10

注意:kotlin区间是闭合的,意味着第二个值始终是区间的一部分
如果你能迭代区间中所有的值,这样的区间叫做数列

举个例子使用不带参数的when实现FizzBuzz:
规则:用fizz单词替代任何可以被三整除的数字,用buzz单词替代任何可以被五整除的数字。如果一个数字同时是三和五的乘数,我们叫“FizzBuzz”。

fun fizzBuzz(i: Int) = when {i % 15 == 0 -> "FizzBuzz " //i可以被15整除,返回FizzBuzz。就像在Java中,%是模操作i % 3 == 0 -> "Fizz " //i可以被5整除,返回Buzzi % 5 == 0 -> "Buzz " //i可以被3整除,返回Fizzelse -> "$i " //Else返回这个数字本身
}
for (i in 1..100) { //迭代整数范围1..100print(fizzBuzz(i))
}
//1 2 Fizz 4 Buzz Fizz 7 ...

4、迭代map

我们提到过,最常见的情形是,for…in循环是迭代一个集合。这个是和Java是一样的,所以下面我们看看怎么迭代一个map。

举个例子:打印字符的二进制表示

val binaryReps = TreeMap<Char, String>()//用TreeMap,所以键是排序的for (c in 'A'..'F') { //用字符的范围迭代从A到F的字符val binary = Integer.toBinaryString(c.toInt()) //ASCII编码转换到二进制binaryReps[c] = binary//在map中用c键存储值
}
for ((letter, binary) in binaryReps) { //迭代一个map,把键值对赋值到两个变量println("$letter = $binary")
}

从上面代码可以看出来..语法创建范围不仅仅对数字适用,也对字符适用。

上面的代码使用了一个小技巧,使用键来访问和更新map的简明语法,可以使用map[key]来读取值,并使用map[key]=value设置他,不需要getset
如下代码:
binaryReps[c] = binary
等价于java:
binaryReps。put(c,binary)

5、使用in检查集合和区间的成员

使用in运算符来检查一个值是否在区间中,或者它的逆运算!in来检查这个值是否不在这个区间中。

fun isLetter(c: Char) = c in 'a'..'z' || c in 'A'..'Z'
fun isNotDigit(c: Char) = c !in '0'..'9'
println(isLetter('q')) //true
println(isNotDigit('x')) //true

其实 c in 'a'..'z'等价于a <= c && c <= z

in和!in操作子也可以在when表达式里面使用

fun recognize(c: Char) = when (c) {in '0'..'9' -> "It's a digit!"in 'a'..'z', in 'A'..'Z' -> "It's a letter!"else -> "I don't know…"
}
println(recognize('8')) //It's a digit!

in的使用范围不只局限于字符串。如果你有任何支持比较实例的类(实现了java.lang.Comparable),就可以对这个类的实例进行比较。
如:

println("Kotlin" in "Java".."Scala") //和“Java” <= “Kotlin” && “Kotlin” <= “Scala”一样
//true

字符串在这里是按字母比较的,因为那是String类是这样实现Comparable接口的。

in同样适用于集合

println(“Kotlin” in setOf(“Java”, “Scala”,“hello”)) //这个集没有“Kotlin”字符串
//false

kotlin不包含在集合里面。

总结

  • 1、for 、while和do-while循环与java相似,但是for循环现在更加方便,特别是迭代map的时候。
  • 2、用简洁的语法1..5表示区间。
  • 3、可以使用in和!in运算符来检查某个值是否属于某个区间。
  • 3、..包含起始值和结束值。

扫码关注公众号“伟大程序猿的诞生“,更多干货新鲜文章等着你~

公众号回复“资料获取”,获取更多干货哦~

有问题添加本人微信号“fenghuokeji996” 或扫描博客导航栏本人二维码

Kotlin实战【四】迭代事物:while和for相关推荐

  1. Kotlin实战(三)

    一.元组 1.1.二元元组 data class Pair<out A, out B>(public val first: A,public val second: B ) : Seria ...

  2. Kotlin实战指南十七:JvmField、JvmStatic使用

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/116668666 本文出自[赵彦军的博客] 文章目录 往期精彩文章 @JvmFiel ...

  3. 《Kotlin实战》读书笔记第二章

    Kotlin基础 1.基本要素:函数和变量 函数 语句和表达式: 在Kotlin中,if是表达式而不是语句. 表达式:有值,能作为另一个表达式的一部分使用 语句:无值,总是包围着它的代码块中的顶层元素 ...

  4. flutter 项目实战四 列表数据展示

    本项目借用 逛丢 网站的部分数据,仅作为 flutter 开发学习之用. 逛丢官方网址:https://guangdiu.com/ flutter windows开发环境设置 flutter 项目实战 ...

  5. 【基础篇】Kotlin第四讲-类、对象和接口

    类 类是逻辑组织的基本单元,类含有以下成分:依赖包,类名,构造方法,属性,成员方法,伴生对象,接口,父类等 类的构造方法的完整逻辑过程 先考虑主构造函数,当主构造函数不够用时,再引入从构造函数.最初的 ...

  6. Kotlin实战指南二十:flow

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/117370700 本文出自[赵彦军的博客] 文章目录 往期精彩文章 flow 是啥 ...

  7. Kotlin实战指南十九:use 函数魔法

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/117366756 本文出自[赵彦军的博客] 文章目录 往期精彩文章 use函数 往期 ...

  8. Kotlin实战指南十八:open、internal 关键字使用

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/117365712 本文出自[赵彦军的博客] 文章目录 往期精彩文章 open关键字 ...

  9. [python opencv 计算机视觉零基础到实战] 四、了解色彩空间及其详解

    一.学习目标 了解什么是色彩空间 了解opencv中色彩空间的转换 目录 [python opencv 计算机视觉零基础到实战] 一.opencv的helloworld [[python opencv ...

  10. Kotlin 实战翻译 —— 仿微信图片选择开源库ImagePicker

    2017.10.27补充 在用Kotlin写项目的时候由于不能使用生成成员变量的快捷键,导致我写findViewById浪费了好多时间,后来才发现Kotlin对Android有更好的支持,可以完全不用 ...

最新文章

  1. jQuery EasyUI 表单插件 - Datebox 日期框
  2. 一文弄懂神经网络中的反向传播法——BackPropagation
  3. Ubuntu 16.04 安装arm-linux-gcc交叉编译
  4. Linux环境下段错误的产生原因及调试方法小结
  5. Spark UDF用户自定义函数
  6. java序列化有什么用_java中序列化的作用
  7. php中使用websocket
  8. 2012年最佳免费网站和移动应用 PSD 界面素材揭晓
  9. 怎么彻底移除虚拟机_Parallels Desktop虚拟机怎么完全卸载? PD虚拟机完全卸载方法...
  10. 如何高效阅读 Spark 和 Hadoop 这类大型开源项目源代码?
  11. hdoj2046骨牌铺方格题解+拓展(递推/斐波那契)
  12. 记一次失败的 ThoughtWorks 面试经历
  13. kvm坐席系统通过IP网关实现kvm设备系统去中心化管理应用
  14. Android系统应用开发
  15. 华硕PRIME Z390-P主板设置开启虚拟化技术
  16. java五个数以升序排列,java4个数的数组排列
  17. jenkins:无法连接仓库
  18. 杂谈:WiFi7 -802.11ax的实现成本
  19. 2.8.5Django --9 Django与Ajex
  20. 洛谷P1075 质因数分解C语言

热门文章

  1. C#:导出json数据到Excel表格
  2. vnc连接linux颜色灰色,关于vnc登录界面为灰色解决办法【p13】.pdf
  3. Jquery ajax, Axios, Fetch区别之我见
  4. Java设计模式-策略模式、状态模式
  5. 自动驾驶_高精地图与车辆协同
  6. 【一天一个C++小知识】011.C++编译的流程
  7. 论文阅读笔记(十二)——U-Net: Convolutional Networks for Biomedical Image Segmentation
  8. springcloud 服务调用的两种方式
  9. 剑指前端(前端入门笔记系列)——Date对象
  10. 框架Thinkphp5 简单的实现行为 钩子 Hook