Kotlin自学日记之人机交互&空值和异常处理

  • 人机交互
  • 异常处理
  • Kotlin中的!!和?的使用

人机交互意味着脱离了脱离了死板的运行->产生结果->结束,让代码在运行的过程中可以进行人工的干预,将过程变为运行->交互->产生结果->结束。让程序有更多的可能性。

简单的代码示例如下:

fun main(args:Array<String>)
{
	var a=readLine()
	println(a)	
}

实验结果:运行过程中输入你是小猪,得出结果你是小猪

你是小猪
你是小猪

此时让我们思考一个问题:如果我在运行过程中不输入数据会产生什么样的结果?让我们来试一下
实验结果:运行过程中直接回车,得出的结果 (啥也没)
真相:实际上readLine读取的是数据默认为字符串,当我们直接回车的时候,得到的是“”的字符串。

这时候我们需要用一个比较直观的例子:

fun main(args:Array<String>)
{
    var a= readLine()
    var b=a.toInt()
    println(b)
}

这时候我的想法是输入一个数字,将其读取赋值给a,再将a转化为int类型赋值给b打印输出(直接打印a得到的数字其实是一个String类型的数据而非Int类型的数据)
表面上看起来没有什么错误,但是此时IEDA报错

Only safe (?.) or non-null asserted (!!.) calls are allowed on a nullable receiver of type String?

它的意思是:a是一个不安全的数据,a有可能是一个空值,只有在a后添加?或者添加!!号后才能允许接收一个String类型的空值。

这就要引入一个概念:

使用Java稍不留神很容易导致NullPointException。Kotlin的类型系统使用可空类型(Nullable Type)旨在消除null引用导致的代码出错。Kotlin要求我们必须检测可空类型的值,只有非null的值才允许访问。以避免null引用的出现。

所以对于一个输入的数据我们可以做以下处理来避免Null引用的出现:

  • 在变量名后加?
 var a= readLine()
 var b=a?.toInt()

那么当我们运行中输入了?后 该问题解决
"?"加在变量名后,系统在任何情况不会报它的空指针异常

  • 还有一种情况是在变量名后加 !!
 var a= readLine()
 var b=a!!.toInt()

在这种情况下
"!!"加在变量名后,如果对象为null,那么系统一定会报异常!

上述两种方式都能很好的避免空值的出现引起的空指针异常现象。

好了继续我们的例子,让我们做一个简单的加法来进行实验:

fun main(args:Array<String>)
{
    println("请输入第一个数字:")
    var a= readLine()
    var b=a!!.toInt()
    println("请输入第二个数字:")
    var c= readLine()
    var d=c!!.toInt()
    println("${b}+${d}=${b+d}")
}

这个例子可以进行简单的加法运算
如果我们按照正常规则来:

请输入第一个数字:
1
请输入第二个数字:
3
1+3=4

那么我们可以得出正确答案

但是如果我们此时异想天开脑洞大开做了些匪夷所思的事儿:
比如我们想输入小王+小张 得到结果❤
抱歉,不可以
这只会产生一个后果:

Exception in thread "main" java.lang.NumberFormatException: For input string: "小王"

那么 我们该如何去规避由于输入异常导致的问题呢:
这时候引入了异常处理机制也就是Java中的try{}catch(){}

import java.lang.Exception

fun main(args:Array<String>)
{
    while (true) {
        try {
            println("请输入第一个数字:")
            var a = readLine()
            var b = a!!.toInt()
            println("请输入第二个数字:")
            var c = readLine()
            var d = c!!.toInt()
            println("${b}+${d}=${b + d}")
            break
        } catch (e: Exception) {
            println("键入错误!请输入数字")
        }
    }
}

结果如下:

请输入第一个数字:
小王
键入错误!请输入数字
请输入第一个数字:
1
请输入第二个数字:
3
1+3=4

此时如果我们输入的是错误的数据类型则会有相信的提示,不会由于错误导致程序中断运行。

此篇为新手日记,如果有不对的地方请各位大佬予以指正!感谢!

不懂就问:Kotlin中异常处理与Java的异同点都有那些?

发布了15 篇原创文章 · 获赞 3 · 访问量 347

猜你喜欢

转载自blog.csdn.net/Py_csdn_/article/details/104548328