iT邦幫忙

2023 iThome 鐵人賽

DAY 13
0

目錄

  1. class 修改
  2. 按鈕互動
  3. 虛擬裝置測試與微調

正文

由於昨天腦袋過於混亂,程式寫得很亂,各位應該看得很痛苦吧,我很抱歉QQ。

class 修改

今天的第一件事就是把 class 的內容完善一點,以下是 class code:

class Bmi(){
    private var _height: Double = 0.0
    private var _weight: Double = 0.0
    private var _bmi: Double = 0.0

    public fun reset(){
        _height = 0.0
        _weight = 0.0
        _bmi = 0.0
    }
    public fun setHeight(height:String){
        _height = height.toDouble()
    }
    public fun setWeight(weight:String){
        _weight = weight.toDouble()
    }
    public fun getBmi(): String{
        return _bmi.toString()
    }
    public fun calculate(){
        _height = pow(changeUnit(_height))
        _bmi = _weight/_height
    }
    public fun changeUnit(value: Double): Double{
        return value/100
    }
    public fun pow(value: Double): Double{
        return value*value
    }
}

按鈕互動

其實寫法跟選號機差不多,只是因為多了 class 的部分,按下按鈕後會觸發 calculateBMI 和showBMI 這兩個 methon。

  1. 架構如下,大家可以先自己思考怎麼寫
    class MainActivity : AppCompatActivity() {
        private val bmi = Bmi() // 宣告一個變數,方便呼叫 class
    
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_main)
    
            val button: Button = findViewById(R.id.button3)
            button.setOnClickListener{ // 偵測按鈕觸發
                calculateBMI()
                showBMI()
            }
        }
        private fun calculateBMI(){
            /.../
        }
        private fun showBMI(){
            /.../
        }
    }
    
  2. calculateBMI 的程式碼如下:
    private fun calculateBMI(){
    		val height:TextView = findViewById(R.id.editTextText)
    		val weight:TextView = findViewById(R.id.editTextText2)
    		bmi.reset() // 重設 BMI,這個步驟可有可無,看個人習慣
    		bmi.setHeight(height.text.toString()) // input height
    		bmi.setWeight(weight.text.toString()) // input weight
    		bmi.calculate() // 計算 BMI
    }
    
  3. showBMI 的程式碼如下:
    private fun showBMI(){
        val resultText: TextView = findViewById(R.id.textView)
        resultText.text = bmi.getBmi() // output bmi
    }
    

虛擬裝置測試與微調

  1. 點擊 RUN app,會發現 BMI 結果一大串,我們需要過濾小數點後幾位的問題
    https://ithelp.ithome.com.tw/upload/images/20230928/20162387WRy4Ljoi2H.png
  2. 在 class 那邊新增一個 methon,用來將 _bmi 的資料只取小數點後兩位
    public fun roundToTwoDecimalPlaces(){
        _bmi = (_bmi * 100.0).roundToInt()/100.0
    }
    
  3. 加入到 showBMI 的位置
    private fun showBMI(){
        val resultText: TextView = findViewById(R.id.textView) // 跟剛剛 Button 是一樣的
        bmi.roundToTwoDecimalPlaces()
        resultText.text = bmi.getBmi()
    }
    
  4. 再次點擊 RUN app,就會看到漂亮的畫面了
    https://ithelp.ithome.com.tw/upload/images/20230928/20162387g8DJAc5WtE.png
  5. 另外補充一個小東西,原本 Plain Text 的初始內容我們寫在 text 這個參數上,導致每當我們輸入的時候都要先把上面的 text 刪掉再輸入身高、體重,現在我們改成將初始內容寫在 hint 這個參數上
    android:hint="身高(cm)" // 原本是 android:text="身高(cm)"
    android:hint="體重(kg)" // 原本是 android:text="體重(kg)"
    

總結

好的,今天的資訊量過於龐大,因此偷懶的星星決定再拖延一天,相信在中秋節當天做完 BMI 博士也是一件很有趣的事情,你們說是吧!

希望看完這篇文章的各位今天都可以搭上返鄉列車,反正我是沒搭上啦 ˊˇˋb。

下一篇真的真的會認真做完 BMI 博士喔。

參考資料

Kotlin - toDouble
https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.text/to-double.html

在 Kotlin 中用 2 位小數四捨五入浮點數或雙精度數
https://www.techiedelight.com/zh-tw/round-up-a-float-or-a-double-with-2-decimal-places-in-kotlin/

Android Studio 菜鳥筆記本-Day 14-元件介紹-Toast
https://ithelp.ithome.com.tw/articles/10246269


上一篇
Day.12 小專案練習(BMI 博士)- 1
下一篇
Day.14 小專案練習(BMI 博士)- 3
系列文
剛學Kotlin的我想要玩安卓開發,自學 Android Studio 30 天31
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言