Kotlin实战【四】迭代事物:while和for
1、while循环
kotlin的while
和do-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设置他,不需要get
和set
。
如下代码:
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相关推荐
- Kotlin实战(三)
一.元组 1.1.二元元组 data class Pair<out A, out B>(public val first: A,public val second: B ) : Seria ...
- Kotlin实战指南十七:JvmField、JvmStatic使用
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/116668666 本文出自[赵彦军的博客] 文章目录 往期精彩文章 @JvmFiel ...
- 《Kotlin实战》读书笔记第二章
Kotlin基础 1.基本要素:函数和变量 函数 语句和表达式: 在Kotlin中,if是表达式而不是语句. 表达式:有值,能作为另一个表达式的一部分使用 语句:无值,总是包围着它的代码块中的顶层元素 ...
- flutter 项目实战四 列表数据展示
本项目借用 逛丢 网站的部分数据,仅作为 flutter 开发学习之用. 逛丢官方网址:https://guangdiu.com/ flutter windows开发环境设置 flutter 项目实战 ...
- 【基础篇】Kotlin第四讲-类、对象和接口
类 类是逻辑组织的基本单元,类含有以下成分:依赖包,类名,构造方法,属性,成员方法,伴生对象,接口,父类等 类的构造方法的完整逻辑过程 先考虑主构造函数,当主构造函数不够用时,再引入从构造函数.最初的 ...
- Kotlin实战指南二十:flow
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/117370700 本文出自[赵彦军的博客] 文章目录 往期精彩文章 flow 是啥 ...
- Kotlin实战指南十九:use 函数魔法
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/117366756 本文出自[赵彦军的博客] 文章目录 往期精彩文章 use函数 往期 ...
- Kotlin实战指南十八:open、internal 关键字使用
转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/117365712 本文出自[赵彦军的博客] 文章目录 往期精彩文章 open关键字 ...
- [python opencv 计算机视觉零基础到实战] 四、了解色彩空间及其详解
一.学习目标 了解什么是色彩空间 了解opencv中色彩空间的转换 目录 [python opencv 计算机视觉零基础到实战] 一.opencv的helloworld [[python opencv ...
- Kotlin 实战翻译 —— 仿微信图片选择开源库ImagePicker
2017.10.27补充 在用Kotlin写项目的时候由于不能使用生成成员变量的快捷键,导致我写findViewById浪费了好多时间,后来才发现Kotlin对Android有更好的支持,可以完全不用 ...
最新文章
- jQuery EasyUI 表单插件 - Datebox 日期框
- 一文弄懂神经网络中的反向传播法——BackPropagation
- Ubuntu 16.04 安装arm-linux-gcc交叉编译
- Linux环境下段错误的产生原因及调试方法小结
- Spark UDF用户自定义函数
- java序列化有什么用_java中序列化的作用
- php中使用websocket
- 2012年最佳免费网站和移动应用 PSD 界面素材揭晓
- 怎么彻底移除虚拟机_Parallels Desktop虚拟机怎么完全卸载? PD虚拟机完全卸载方法...
- 如何高效阅读 Spark 和 Hadoop 这类大型开源项目源代码?
- hdoj2046骨牌铺方格题解+拓展(递推/斐波那契)
- 记一次失败的 ThoughtWorks 面试经历
- kvm坐席系统通过IP网关实现kvm设备系统去中心化管理应用
- Android系统应用开发
- 华硕PRIME Z390-P主板设置开启虚拟化技术
- java五个数以升序排列,java4个数的数组排列
- jenkins:无法连接仓库
- 杂谈:WiFi7 -802.11ax的实现成本
- 2.8.5Django --9 Django与Ajex
- 洛谷P1075 质因数分解C语言
热门文章
- C#:导出json数据到Excel表格
- vnc连接linux颜色灰色,关于vnc登录界面为灰色解决办法【p13】.pdf
- Jquery ajax, Axios, Fetch区别之我见
- Java设计模式-策略模式、状态模式
- 自动驾驶_高精地图与车辆协同
- 【一天一个C++小知识】011.C++编译的流程
- 论文阅读笔记(十二)——U-Net: Convolutional Networks for Biomedical Image Segmentation
- springcloud 服务调用的两种方式
- 剑指前端(前端入门笔记系列)——Date对象
- 框架Thinkphp5 简单的实现行为 钩子 Hook