前情提要
安卓开发学习日记第一天_Android Studio3.6安装
安卓开发学习日记第二天_破坏陷阱卡之sync的坑
安卓开发学习日记第三天_新手怪button
安卓开发学习日记第四天_会爬就会跑
内容与第四天的一样,可以直接从第四天的日记获取
安卓开发学习日记第四天_会爬就会跑
我们可以看到kotlin作为一种强类型语言,不仅可以用var和val去规定变量是可变变量还是只读变量,同时在变量的后面也可以补指定一个类型,以实现它的类型推理机制
//声明一个对象数组类型是Button,名字是buttons
private var buttons = arrayOfNulls<Button>(10)
//按钮的标签,用于判断按钮是否可见,用布尔数组表示
private var flag: Array<Boolean> = arrayOf(true,true,true,true,true,true,true,true,true,true)
//用于存放布局中按钮的ID,我们可以看出R.id.XX的类型是Int
private val buttonID: Array<Int> = arrayOf(0,R.id.button1,R.id.button2,R.id.button3,R.id.button4,R.id.button5,R.id.button6,R.id.button7,R.id.button8,R.id.button9)
//用于计算你点击了多少次
private var count = 0
在这段代码里面我们可看到两个语法糖,当循环结构或选择结构里面只有一个语句的时候,写出以下形式就可以简化代码,让我们更方便地使用它(语法糖也相当于我们中文里面的成语,浓缩就是精华)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
//利用循环简化赋值过程
for(i in 1..9)buttons[i] = findViewById(buttonID[i])
//需要传入接口实现类的实例。
//此时接口实现类的实例为MainActivity
for (j in 1..9) buttons[j]?.setOnClickListener(this)
}
第二个for循环里面的buttons[i]后面有个" ? ",这个小问号就是用于判空,因为我们写代码时候不一定会知道实际运行的时候是否出现空指针,因此我们需要“ ? ”来对对象进行判空
与之相对应的,如果我们确定这个对象不会是空指针的时候,那么我们就可以用非空断言语句“ !! ”来提高运行的效率
看到这里大家肯定会发现kotlin的for循环和python的for循环很像,就是比python的for循环多了个括号,其中的0..4意味着0到4的闭区间
private fun convertBoolean(a: Int, b: Int, c: Int, d: Int, e: Int){
val flags: Array<Int> = arrayOf(a,b,c,d,e)
//根据传入的参数转换flag的值
for(i in 0..4) if (flags[i] != 0)flag[flags[i]] = !flag[flags[i]]
//按钮状态变换接口
showButton()
}
这里的for循环中使用了kotlin中的when语法,代替了Java的switch语句(奇怪的行数减少了)
private fun showButton(){
var tag = 0
//根据标签的状态实现按钮是否可见
for(i in 1..9)when (flag[i]) {
true -> buttons[i]?.visibility = View.VISIBLE//使按钮可见
false -> buttons[i]?.visibility = View.INVISIBLE//使按钮不可见
}
//记录点击次数
count++
//检查标签的状态
for (i in 1..9)if(!flag[i])tag++
//在屏幕中弹出消息
if(tag == 9){
Toast.makeText(this,"恭喜你赢得了游戏!\n本次游戏你一共点击了"+count+"次!", Toast.LENGTH_LONG).show()
//完成游戏后按钮复位
for (i in 1 .. 9)convertBoolean(i,0,0,0,0)
}
}
大家可以回去上一天的日记里数数这一段一共用了几行,用kotlin用了几行(kotlin牛逼)
第四天的日记在这里~
这里when中的v同样也进行了判空
override fun onClick(v: View?) {
when(v?.id) {
R.id.button1 -> convertBoolean (1,2,4,0,0) //改变对于按钮的状态标签
R.id.button2 -> convertBoolean (1,2,3,5,0) //改变对于按钮的状态标签
R.id.button3 -> convertBoolean (2,3,6,0,0) //改变对于按钮的状态标签
R.id.button4 -> convertBoolean (1,4,5,7,0) //改变对于按钮的状态标签
R.id.button5 -> convertBoolean (2,4,5,6,8) //改变对于按钮的状态标签
R.id.button6 -> convertBoolean (3,5,6,9,0) //改变对于按钮的状态标签
R.id.button7 -> convertBoolean (4,7,8,0,0) //改变对于按钮的状态标签
R.id.button8 -> convertBoolean (5,7,8,9,0) //改变对于按钮的状态标签
R.id.button9 -> convertBoolean (6,8,9,0,0) //改变对于按钮的状态标签
}
}