学习
实践
活动
专区
工具
TVP
写文章
专栏首页伟大程序猿的诞生Kotlin实战【四】迭代事物:while和for

Kotlin实战【四】迭代事物:while和for

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整除,返回Buzz
    i % 5 == 0 -> "Buzz " //i可以被3整除,返回Fizz
    else -> "$i " //Else返回这个数字本身
}
for (i in 1..100) { //迭代整数范围1..100
    print(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、..包含起始值和结束值。
本文参与 腾讯云自媒体分享计划 ,欢迎热爱写作的你一起参与!
本文分享自作者个人站点/博客:https://blog.csdn.net/github_33304260复制
如有侵权,请联系 cloudcommunity@tencent.com 删除。
登录 后参与评论
0 条评论

相关文章

  • Kotlin | 2.Kotlin基础

    在定义了val变量的代码块执行期间,val变量只能进行唯一一次初始化。但是,如果编译器能确保只有唯一一条初始化语句被执行,可以根据条件使用不同的值来初始化它:

    Jingbin
  • 【Kotlin 】Kotlin基础

    在定义了val变量的代码块执行期间,val变量只能进行唯一一次初始化。但是,如果编译器能确保只有唯一一条初始化语句被执行,可以根据条件使用不同的值来初始化它:

    易寒
  • 浅谈Kotlin(四):控制流

    听着music睡
  • 2022 JetPack Compose开发应用指南新鲜出炉,速速查看

    对于每个Android开发来说,JetPack Compose应该早就不是陌生的单词了。

    没关系再继续努力
  • 从点滴基础探究Kotlin的独特魅力

    博客:https://www.jianshu.com/p/fbbd68bffc69

    陈宇明
  • 字节跳动Android客户端实习 3+1 面经,内部面试官透露通关秘籍

    我是一名本科应届生,学校专业是软件开发。距离毕业之期不到半年,学校也在催促我们早点出校实习,年前通过一名学长内推去了字节跳动的抖音面试。12 月 31 号投的简...

    Android技术干货分享
  • Kotlin入门(16)容器的遍历方式

    Kotlin号称全面兼容Java,于是乎Java的容器类仍可在Kotlin中正常使用,包括大家熟悉的队列ArrayList、映射HashMap等等。不过Kotl...

    用户4464237
  • Java程序设计的基本结构 - 循环结构

    为了讲解方便,我们可以将循环结构划分为四个部分来进行描述。当然,这四个部分并不是都要出现,甚至在都不出现时也可以构成一个循环结构。并且,对于不同的循环结构,每个...

    一头小山猪
  • 尴尬!6年Android经验面试滴滴,刚聊10分钟就被送走,技术再次被摩擦在地

    作为一名优秀的程序员,技术面试是不可避免的环节,一般技术面试官都会通过自己的方式去考察程序员的技术功底与基础理论知识。

    Android技术干货分享
  • Kotlin学习日志(二)数据类型

    Kotlin的基本数据类型和其他高级语言得分类一样,包括整型、长整型、浮点型、双精度、布尔类型、字符型、字符串这几种常见类型,这样说可能过于抽象,那就和java...

    晨曦_LLW
  • Kotlin基础学习之循环和异常

    Kotlin并没有想象中的那么牛逼哄哄,也并不难,我更喜欢把他看做一枚语法糖,所谓的语法糖就是:能够让代码变得更加简单易读的辅助工具。而工具这种东西,看看说明书...

    砸漏
  • Kotlin极简教程(1)数据类型

    因为种种原因,谷歌把Android的第一开发语言改成了Kotlin。虽然近来用Java编写Android是是非常便利的。但是经过多次更新后,Java在Andr...

    ZackSock
  • 阿里云大神亲码“Kotlin深度笔记”,不讲一句废话,全是精华

    Android相关的火热技术最近几年也是频出,没事就在刷屏,我来说说对这些火热技术的看法。

    分你一些日落
  • Java Stream 源码分析

    Java 8 的 Stream 使得代码更加简洁易懂,本篇文章深入分析 Java Stream 的工作原理,并探讨 Steam 的性能问题。

    Yano_nankai
  • 谷歌官宣Kotlin成为Android 开发首选语言后,这四本书再也藏不住了!

    一年一度的 Google 开发者大会I/O 昨日如期举行。大会上,Google 正式向宣布 Kotlin成为Android 应用程序开发首选语言,接下来很多新的...

    博文视点Broadview
  • Java Stream 源码分析

    Java 8 的 Stream 使得代码更加简洁易懂,本篇文章深入分析 Java Stream 的工作原理,并探讨 Steam 的性能问题。

    Yano_nankai

扫码关注腾讯云开发者

领取腾讯云代金券