为了账号安全,请及时绑定邮箱和手机立即绑定

kotlin : 循环,区间,数组,when,参数,尾递归

标签:
Kotlin

一、循环语句

for循环

//循环遍历字符串,不包含选定字符

fun main(args: Array<String>) {
val ar = "abcde"for(c in ar)
    {    if(c.equals('c'))        continue
        print(c )
    }
    }

for循环带索引

fun main(args: Array<String>) {
    val ar = "abcde"
       for ((index, c) in ar.withIndex()) {
        println("index=$index,c=$c")
    }

forEach循环

fun main(args: Array<String>) {
    val ar = "abcde"
    ar.forEach {
        println(it)
 }
    }

forEach循环带索引

fun main(args: Array<String>) {
    val ar = "abcde"
    ar.forEachIndexed { index, c -> print("index=$index c=$index .") }

注意:

1.for循环可以使用continue和break关键字,forEach循环不可以
2.用来表示变量的值,index表示index变量的值

标签处返回@

  fun main(args: Array<String>) {
    val str1 = "123"
    val str2 = "abc"
  h@ for (c2 in str1) {        for (c1 in str2) {            print("$c1$c2 ")            if (c1 == 'b' && c2 == '2')            break@h
        }
    }
}
//此处用于以break结束外层for循环

while循环

fun main(args: Array<String>) {     var i = 1
     var count = 0
     while(i<=100)
     { count += i
         i++ }
     println(i )
     println(count)
     }//此处注意变量使用.变量修饰符为可变变量var

二、区间

fun main(args: Array<String>) {
    val arr = IntRange(0, 100)
    val arr1 = 1.rangeTo(100)
    val arr2 = 1..100
    //区间的三种定义方式(均包含头尾)
    val arr3 = 'a'.rangeTo('s')
    val arr4 = CharRange('b','y')
    val arr5 = 'A'..'z'

    val arr6 = LongRange(1,100)
    val arr7 = 2L.rangeTo(100)
    val arr8 = 1L..100}

//1.区间有IntRange,CharRange,LongRange三种
//2.LongRange书写时后两种方式前面的L不能省略,生成固定代码后可以省略.小写的l会报错

区间遍历

1.加上步长遍历

fun main(args: Array<String>) {
    val arr = IntRange(0, 100)
    val arr1 = 1..100
    for (i in arr.step(2)) {          //arr.step(2)输出偶数,arr1.step(2)输出奇数
        print(" "+i)
    } }

2.for循环加上index

    for ( (index,c) in arr1.withIndex()) {
        println("$index,$c")
    }
       //输出结果为  0,1

2.1

    for (c in arr.withIndex()) {
        println(c)
    }                      
  //默认写法输出值IndexedValue(index=0, value=0)

3.forEach遍历

arr.forEach { println(" "+it) } //it为固定名称变量,不可修改
  4.forEach带索引遍历
arr5.forEachIndexed { index, c ->
    println("$index,$c")
}

反向区间 downTo

val ar = 25 downTo 1println(ar)      //结果为 25 downTo 1 step 1

区间的反转 reversed

val al = ar.reversed()

数组

1.定义
1.1 已知元素

   val arr = arrayOf("张三","李四","王五")
   val arr5 = arrayOf("李", 4, '3')         //Any型数组
   val arr3 = intArrayOf(3,4,4)           //定义整型数组
 注: arrayOf不带类型,数组可以是任意类型

1.2 只知道元素个数

   val arr2 = IntArray(3)   //定义一个长度(元素个数)为3的字符数组,初始值为1
   val arr1 = Array<String>(3){"1"}
   val arry = Array<Char>(4) { 'a' }
 注:String字符串数组创建含Any型只有2种

2.访问与修改

   val arr5 = arrayOf("李", 4, '3')
    println(arr5[2])              /输出为 3
    val arr2 = IntArray(3)
    arr2.set(1,2)
    println(arr2[1])              /2
    println(arr2[0])              /0

3.查找数组索引/角标

val arr5 = arrayOf("李一","李四","李三","李四","王")
   println(arr5.lastIndexOf("李四"))
   println(arr5.indexOfLast { it == "李四" })//前两个结果都为3
   println(arr5.indexOfFirst { it == "李四"})  //1
   println(arr5.indexOf("王"))     //默认输出第一个索引          val index3 = arr5.indexOfFirst {
       it.startsWith("李")
   }
       println(index3)        //0
   println(arr5.indexOfLast { it.startsWith("李") }) //3

注:
startsWith只可用于String数组

when表达式

fun Grade(score: Int): String {
   when(score){       100 ->return "满分"
       in 90..99 -> return "优秀"
       in 80.rangeTo(89) ->return "良好"
       in 70.rangeTo(79) ->return "及格"
       in IntRange(60,69) -> return "较好"
       else->return "不及格"
   }
}

简写格式

    fun Grade(score: Int): String =
        when(score){            100 -> "满分"
            in 90..99 -> "优秀"
            in 80.rangeTo(89) -> "良好"
            in 70.rangeTo(79) -> "及格"
            in IntRange(60,69) ->  "较好"
            else-> "不及格"
        }

函数表达式

fun main(args: Array<String>) {
    println(Grade(83))           //上面的调用
    fun max(a:Int,b:Int) = if(a>b) a else b    println(max(-3, 5))
}

另一种写法

fun max(a:Int,b:Int):Int{    return if(a>b) a    else b
}

函数变量

invoke可以非空判断

    val minus:(Int,Int)->Int= {a,b->a-b}
    println(minus(3, 5))
    println(minus.invoke(9, 3))

函数引用::

val app=::Grade

默认参数/具名参数

fun  SendRequest(method:String="GET",path:String){
    println("$method,$path")
}
fun main(args: Array<String>) {
 SendRequest("POST","www.baidu.com")  //POST,www.baidu.comSendRequest(path ="www.google.com")   //GET,www.google.com SendRequest("GET","www.cn.com")       //GET,www.cn.com}



作者:证始
链接:https://www.jianshu.com/p/117b7a375fb8


点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消