Kotlin入门(Android开发)基础知识汇总(二)之控制语句

1.if-else语句

基本用法和c语言一样,但如果每个分支内部只有一个字符串返回值,此时可以去掉大括号。示例:

if (isTrue==true) "真" else "假"

2.多路分支when/else

与switch/case的区别:

<1>关键字switch被when取代;

<2>判断语句“case 常量值:”被新语句“常量值 ->”取代;

<3>取消break,关键字default被else取代。

when (count) {
    0 -> tv_answer.text = "000000000"
    1 -> tv_answer.text = "111111111"
    else -> tv_answer.text = "-1"
}

//允许有返回值
tv_answer.text = when (count) {
    0 -> "000000000"
    1 -> "111111111"
    else -> "-1"
}

//允许接收变量
var zero:Int = 0
var one:Int = 1
tv_answer.text = when (count) {
    odd -> "000000000"
    even -> "111111111"
    else -> "-1"
}

此外,多个常量值共用一个分支时,并排在一起并用逗号隔开即可。如果几个常量值刚好是连续数字,可以使用“in 开始值..结束值”指定区间范围,如果不在某个区间范围,则使用语句“!in 开始值..结束”。

tv_answer.text = when (count) {
    1,3,5,7,9 -> "凉风有信的谜底是"讽""
    in 13..19 -> "秋月无边的谜底"二""
    !in 6..10 -> "当里的当,少侠你来猜猜"
    else -> "这是一首好诗"
}

3.类型判断

关键字instanceof被is取代,下面是类型判断的Kotlin代码格式:

if (str is String){...}

同时多路分支的when/else也支持类型判断,只不过在分支判断时采取“is 变量类型 ->”这种形式。

示例:

tv_answer.text = when (countType) {
    is Long -> "此恨绵绵无绝期"
    is Double -> "树上的鸟儿成双对"
    else -> "门泊东吴万里船"
}

4.循环处理

4.1for-in循环

采用“for(item in list)”形式进行循环操作

var poem =""
for (item in poemArray) {
    poem = "$poem$item,\n"
}

数组循环采用““for (i in 数组变量.indices)”语句,其中indices表示该数组变量的下标数组,示例:

var poem:String=""
//indices表示数组变量对应的下标数组
for (i in poemArray.indices) {
    if (i%2 == 0) {
        poem = "$poem${poemArray[i]},\n"
    } else {
        poem = "$poem${poemArray[i]}。\n"
    }
}
tv_poem_content.text = poem

其他for循环形式:

// 左闭右开区间,合法值包括11,但不包括66
for (i in 11 until 66) { ... }
// 每次默认值递增1,这里改为每次递增4
for (i in 23..89 step 4) { ... }
// for循环默认递增,这里改为默认递减
for (i in 50 downTo 7) { ... }

4.2条件循环

while循环和Java一样

//while循环
while (i < poemArray.size) {
    if (i%2 ==0) {
        poem = "$poem${poemArray[i]},\n"
    } else {
        poem = "$poem${poemArray[i]}。\n"
    }
    i++
}

//do while循环
do {
    if (i%2 ==0) {
        poem = "$poem${poemArray[i]},\n"
    } else {
        poem = "$poem${poemArray[i]}。\n"
    }
    i++
} while (i < poemArray.size)

4.3跳出多重循环

continue和break都保留Java的用法,但Kotlin还可以跳出多重循环。跳出外层循环需要加个@标志。示例:

//给外层循环加个outside的标志
outside@ while (i < poemArray.size) {
    var j:Int = 0
    var item = poemArray[i];
    while ( j < item.length) {
        if (item[j] == '􀓞') {
            is_found = true
            //直接跳出outside循环
            break@outside
        }
    }
    j++
}

5.空安全

Kotlin 校验字符串空值的几个方法

<1>isNullOrEmpty:空指针或者字符串长度为0时返回true,非空串与可空串均可调用;

<2>isNullOrBlank:空指针或字符串长度为0或全为空格时返回true,非空串与可空串均可调用;

<3>isEmpty:字符长度为0时返回true,只有非空串可调用;

<4>isBlank:字符长度为0或者全为空格时返回true,只有非空串可调用;

<5>isNotEmpty:字符串长度不为0时返回true,只有非空串可调用;

<6>isNotBlank:字符串长度不为0且不是全空格串时返回true,只有非空串可调用。

5.1声明可空变量

声明一个可空字符串

var strCanNull:String?//可空字符串需要进行非空判断,否则编译器会提示代码错误

var strNotNull:String//该变量值不能为null,否则编译器会提示代码错误

5.2检验空值的运算符

示例加用法说明:

var length_null:Int?
val strB:String? = null

btn_question_dot.setOnClickListener {
    //?.表示变量为空时直接返回null,所以返回值的变量必须被声明为可空类型
    length_null = strB?.length
    tv_check_result.text = "使用?.得到字符串B长度为$length_null"
}


btn_question_colon.setOnClickListener {
    //?:表示为空时返回右边的值,即(x!=null)?x.**:y
    length = strB?.length?: -1
    tv_check_result.text = "使用?:得到字符串B的长度为$length"
}

btn_exclamation_two.setOnClickListener {
    strB = "排雷完毕"
    //!!.强行把strB变量从可空类型转换为非空类型,从而避免非空检验
    length = strB!!.length
    tv_check_result.text = "使用!!得到字符串B的长度为$length"
}

btn_exclamation_two.setOnClickListener {
    //!!.表示不做非空判断,强行执行后面的表达式,如果变量为空,就抛出异常
    //只有确保非空时,才能使用!!,不然使用要catch异常
    try {
        length = strB!!.length
        tv_check_result.text = "使用!!得到字符串B的长度为$length"
    }catch(e:Exception) {
        tv_check_result.text = "发现空指针"
    }
}

6.等式判断

6.1比较两个字符串相等用“==”,同理,两个字符串不等用“!=”

6.2引用相等---除了值相等外,还要求引用的地址也相等

判断引用相等用“===”表示,同理,不等用“!==”表示

6.3 s和in

运算符is和!is---是否为某种类型

val oneLong:Long = 1L
val result = oneLong is Long//result结果是布尔值

运算符in和!in---判断数组是否存在等值元素

val oneArray:IntArray = intArrayOf(1, 2, 3, 4, 5)
val four:Int = 4
val result = four in oneArray//result值为布尔值

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值