「学姐,我这样的进度真的赶得上期末考吗?」经过上午的事,诗忆一整天都有些焦虑不安,唯心刚进教室她就忍不住提出自己的担忧。
唯心侧头想了想。「这样好了,你先试着写出之前作业的四则运算程序,哪里卡住就问我。」
唯心提供一个几乎空白只保留学号
类别和需求目标的档案。
class 学号 {
//需求目标:四则运算函式,参数有三个,第一个是数字,第二个是加减乘除字元,第三个是数字。
//减法或除法,是第一个数字减去或除去第三个数字。
}
诗忆先加了函式的外壳和加法的部分。
class 学号 {
fun 四则运算(number1: Int, char: Char, number2: Int): Int {
return number1 + number2
}
}
⋯⋯然後就卡住了。
「呃,学姐,你好像忘记教我怎麽比对了。」诗忆尴尬的说。
「咦?没说过吗?」唯心努力回忆。「我记得饮料比较价格那边有说过呀,大概是说得比较模糊,我再说一次吧。」
唯心抽出一张纸,在上面依序画上比对的符号。
「大於和小於是>
和<
,後面加个等号就是大於等於和小於等於的>=
和<=
。不等於是两个符号组成!=
,与之对应的等於自然也是两个符号的组合==
。」
class 学号 {
fun 四则运算(number1: Int, char: Char, number2: Int): Int {
if (char == '+') {
return number1 + number2
}
if (char == '-') {
return number1 + number2
}
if (char == '*') {
return number1 + number2
}
if (char == '/') {
return number1 + number2
}
}
}
学会比对後诗忆写出了第一个版本,但是出师不利,程序跑不起来。
唯心一眼就看出错误原因。「还记得之前我写的测试案例吗?字元不只这四种符号,所以需要例外处理throw IllegalArgumentException()
。」
class 学号 {
fun 四则运算(number1: Int, char: Char, number2: Int): Int {
if (char == '+') {
return number1 + number2
}
if (char == '-') {
return number1 - number2
}
if (char == '*') {
return number1 * number2
}
if (char == '/') {
return number1 / number2
}
throw IllegalArgumentException()
}
}
诗忆依言补上例外处理,程序顺利跑起来。
唯心满意地看着通过测试的程序。「很好,这样就可以了。你这样的写法和else if
的写法处理逻辑相似呢。」
「else if
是什麽?」诗忆确定今天又听到一个新词。
「else
指的是条件以外的情形,else if
就是在条件以外再加上一个新的条件,相对於每个独自if
的写法,else if
让条件式保有连续性判断,可以把共有的return
提出来唷。」唯心没有动诗忆的程序码,而是另外写一个四则运算elseif
版本。
fun 四则运算elseif(number1: Int, char: Char, number2: Int): Int {
return if (char == '+') {
number1 + number2
} else if (char == '-') {
number1 - number2
} else if (char == '*') {
number1 * number2
} else if (char == '/') {
number1 / number2
} else {
throw IllegalArgumentException()
}
}
「不过,也因为if
条件式比对条件有优先顺序,所以如果遇到每个条件发生的可能性一样的时候,为求处理效率会改用when
条件式。」唯心说着又补上了另一个四则运算when
版本。
fun 四则运算when(number1: Int, char: Char, number2: Int): Int {
return when (char) {
'+' -> number1 + number2
'-' -> number1 - number2
'*' -> number1 * number2
'/' -> number1 / number2
else -> throw IllegalArgumentException()
}
}
诗忆疑惑地发问:「为什麽when
条件式在可能性相似的时候处理效率比较高?」
唯心笑了笑:「还记得基础型态里的布林值吗?其实条件式里的条件,都是布林值型态。布林值只有两种值true
和false
。」
唯心顺手写了个列印布林值的程序码。
fun main() {
val char = '+'
val isPlus = char == '+'
println(isPlus)
}
「像这样符合的情形,就会印出true
,反之就是false
。」唯心说完,切换回四则运算
的程序码继续说。「if
条件式是按照优先顺序,只要前面的条件符合就不计算後面条件的布林值。但是when
会把所有条件的布林值都同时算好,再选择第一个true
执行。以参数符合的是第四个条件的'/'
为例,假设每次计算条件需要一秒钟,if
要花上四秒钟,才能抵达除法那行,而when
只要两秒钟。而else
因为是剩下的条件,在两种条件式都会比'/'
多上一秒钟。」
<<: 16. HTTP request methods ( 下 )--- PUT vs. PATCH
今天的 Home 目录没有修改,https://github.com/simba-fs/2021-...
💡 开始使用 Git 之前,我们需要先设定使用者名称及电子邮件地址。 为什麽需要设定用户名称及 E-...
近期面试掀起了一波考演算法的风气,就好像回到大学指考那样,老师说这题会考一定要记起来,因此掀起了一...
Day 23 - Android 程序实作:简单的使用者进入 昨天我讲了我对Android的兴趣,今...
图片来源:*https://www.dcard.tw/f/funny/p/225385728 大家...