1.kotlin语言的特点
2.kotlin中的“基本数据类型”
3.kotlin中的判断语句
4.kotlin中的when语句
5.kotlin中的for循环
6.kotlin中的终端输入
7.作业:ATM取款机
1.空指针安全。
它的空指针安全是基于问号表达式的,这或许是它最大的特点。
2.类型推断。
kotlin可以自动推断相应数据的类型,所以有时定义变量可以不指明类型。
3.跨平台开发。
比如可以用作安卓开发,web浏览器开发,以及原生开发。
Kotlin能够和Java 100%互通。 注意:当kotlin调⽤Java的时候 如果有返回值 尽量使⽤可空类型去接收。
5.代码更加简洁,很多功能相比Java都有增强(后面会一一介绍)。
1.先来看kotlin中的输出语句
fun main(){
println("我是帅哥")
//输出变量
val name = "rose"
println(name)
println("my name is $name")
//当输出的变量的值是多层关系组成的时候,要用 ${} 这种形式
println("my name's length is ${name.length}")
}
2.基本数据类型
在Kotlin中,一切都是对象。不存在int, double等关键字,只存在Int, Double等类。
fun main(){
//var 定义变量
//val 定义常量
//java里面定义常量一般是final,定义变量不加final即可
//而且Java里面如果长期不动这个变量,其实也可以把它当作常量
//1.常量定义注意事项
//上下两种对比,下面这种是不允许的
val pi: Double = 3.23//最好加个空格
/*val pi1:Double
pi1 = 1.0*/
//上面是第一种定义变量的方法,还有第二种,就是不指定类型,类型可以自动推导
val pi2 = 3.33
//这样虽然写起来方便了,但是阅读起来不方便,所以一般来说还是加上类型比较好
//2.变量之间赋值时的注意事项
var pi3 = 3.33//这里就能自动识别出来是Double类型
var pi4 = 1
//pi3 = pi4,这样是不行的,可以看出kotlin是类型安全的语言,类型不一样就不能赋值
//如果真要赋值,可以调用to方法转换一下
pi3 = pi4.toDouble()
//kotlin是没有基本数据类型的,有的是 把基本的数据类型都封装成了 类
//在Kotlin中,一切皆是对象。不存在int, double等关键字,只存在Int, Double等类。
//除了char,第一个字母都大写,这些类都继承于Number,这些数据类型之间可以互相转换
}
kotlin里面的if语句可以看作一个表达式,也就是说它是可以返回值的。print(ln)除外。
//条件语句
fun main(){
var num = 20
//正常操作
if(num >20){
}else{
}
//kotlin里面 if-else是一个表达式,也就是说它是有结果的
val result = if(num > 10) "下载成功" else "下载失败"//这里的结果就是String类型
//这样的话就没有返回值
val res = if(num > 10){
println("$num > 10")
}else{
println("$num < 10")
}
//这样的话它的类型就可以是 {Comparable{Int & String}
val res1 = if(num > 10){
println("$num > 10")
20
}else{
println("$num < 10")
"失败"
}
//上面的代码体现了kotlin条件语句的第一个好处:简洁
//第二个特点就是 更加方便 可以利用kotlin的类型推断,省略很多变量的定义,直接用一个变量var result来接收就可以
//如果没有这个,那就要 一个结果定义一个变量来接收
//比如
val temp:Int
val name:String
if(1 > 0){
temp = 20
}else{
name = "111"
}
//这里是只有两个,如果是多个,那就要定义多个变量,但是kotlin这里不用,上面代码可以改为
var result1 = if(1 > 0) 20 else "111"
//kotlin里面第二个判断语句
//在c语言里面,有一个问号表达式,即 2 > 1 ? a:b
//在kotlin里面有一个判空表达式,即 a ?: b 如果a不为空,那么结果就是a,如果a为空,那么结果就是b
var Myname = "大帅哥"
var result2 = Myname ?: "Myname为空"
println(result2)//此时输出 大帅哥
//
var MynameSecond = null
var result2Second = MynameSecond ?: "Myname为空"
println(result2Second)//此时输出 Myname为空
}
这里的when语句也和if语句一样,可以当作一个表达式,可以有返回值
fun main(){
//首先复习一下switch语句
/*int input = 0;
switch(input){
case 1:
break;
case 2:
break;
}*/
//kotlin用when语句代替了switch语句,并且增强了它的功能
//kotlin中的when语句更简洁
var score:Int = 10
when(score){
10 -> println("10")
20 -> println("20")
30 -> println("30")
40 -> println("40")
else -> println("其他")//类似于default
}//这里输出10
//kotlin中的when语句更灵活
var score1:Int = 10
when(score1){
in 1..60 -> println("考的太差")//这里的in就理解为 属于
in 60..79 ->println("考的不太好")
in 80..89 ->println("考的还行")
in 90..100->println("考的不错")
else -> println("没来考试?")
}//这里输出 考的太差
//kotlin中的when语句更方便,这里when也可以作为表达式
var score2:Int = 10
var result = when(score2){
10 -> 'A'
20 -> 'B'
30 -> 'C'
else -> "emmm"
}
println(result)//这里输出A
}
这里需要注意遍历数组时的几个要点
//for循环
fun main(){
//使用 .. 表示范围
for(i in 1..10){
//print("$i ")
}//输出 1 2 3 4 5 6 7 8 9 10
//使用until就不会包括最后面那个值
for(i in 1 until 10){
//print("$i ")
}//输出1 2 3 4 5 6 7 8 9
//使用step表示增量
for(i in 1..10 step 2){
//print("$i ")//输出 1 3 5 7 9
}
//倒序,这里也可以加上step
for(i in 10 downTo 1){
//print("$i ")
}//输出10 9 8 7 6 5 4 3 2 1
//对于数组
val names = arrayOf("jack","rose","merry")
//正常写法
for(i in 0..names.size -1){
//println(names[i])
}
//对于数组,有一个专门的遍历索引值的写法,即获取对应数组的索引值
for(i in names.indices){
//println(names[i])
}
//增强for写法(依次获取每一个元素)
for(name in names){
//println(name)
}
//特别的,对于数组,还可以同时取出索引值以及相对应的数值
for((index,item) in names.withIndex()){
println("$index - $item")
}
/*输出
0 - jack
1 - rose
2 - merry
*/
/*java中写法
String[] names = new String[]{"1","2"};
//for写法
for (int i = 0; i < names.length - 1 ; i++) {
System.out.print(names[i]);
}
//还可以使用增强for循环
*/
}
//正常输入
val input = readLine()//这里是字符串
println(input)
//如果要输入整数的话
val scanner = Scanner(System.`in`)//注意这里的in要用单引号包裹起来
val num = scanner.nextInt()
println(num)
四个功能:1.查询余额 2.存钱 3.取钱 4.退出
疑点:不知道kotlin中的for循环如何退出,而且最后的for循环为何又走了一次
import java.util.*
//ATM取款机
var balance : Double = 10000.0
fun saveMoney(){
println("请输入要存款的金额")
var scanner = Scanner(System.`in`)
val saveMoney : Double = scanner.nextDouble()
balance = balance + saveMoney
println("存款成功,您的余额为 $balance")
}
fun getMoney(){
println("清输入要取走的金额")
var scanner = Scanner(System.`in`)
var getMoney : Double = scanner.nextDouble()
if(getMoney <= balance) {
balance = balance - getMoney
println("取款成功,您的余额为 $balance")
}else{
println("你没有这么多钱,请重新选择操作")
}
}
fun exit(){
println("感谢您的使用,欢迎下次再来")
return
}
fun main(){
println("***********************************")
println("1.查询余额")
println("2.存钱")
println("3.取钱")
println("4.退出")
println("***********************************")
for(i in 1..9999999999999999){
println("请选择操作")
//接收操作
var input = readLine()
when (input) {
"1" -> println("您的余额为 $balance")
"2" -> saveMoney()
"3" -> getMoney()
"4" -> exit()
}
}
}
结果
1.查询余额
2.存钱
3.取钱
4.退出
请选择操作
1
您的余额为 10000.0
请选择操作
2
请输入要存款的金额
200
存款成功,您的余额为 10200.0
请选择操作
3
清输入要取走的金额
500
取款成功,您的余额为 9700.0
请选择操作
4
感谢您的使用,欢迎下次再来
请选择操作
通过查阅资料,知道了kotlin有标签机制,即
在 Kotlin 中任何表达式都可以用标签(label)来标记。 标签的格式为标识符后跟 @ 符号,例如:abc@、fooBar@都是有效的标签。 要为一个表达式加标签,我们只要在其前加标签即可。
loop@ for (i in 1..100) {
// ……
}
现在,我们可以用标签限制 break 或者continue:
loop@ for (i in 1..100) {
for (j in 1..100) {
if (……) break@loop
}
}
标签限制的 break 跳转到刚好位于该标签指定的循环后面的执行点。 continue 继续标签指定的循环的下一次迭代。
所以上面的代码可以更改为:
loop@ for(i in 1..9999999999999999){
println("请选择操作")
//接收操作
var input = readLine()
when (input) {
"1" -> println("您的余额为 $balance")
"2" -> saveMoney()
"3" -> getMoney()
"4" -> break@loop
else -> println("您输入有误,请重新输入")
}
}
但是还是有一个局限性,就是输入 4 的时候,我还想再输出 您选择退出,但是input的每一个值好像只允许写一行,所以只能选择了break。可能我理解有误,也可能有别的解决办法,今天我也没找到,不过没关系,后面学着学着就知道哪里有问题了。
总之今天收获不小,明天继续加油!!!