iT邦幫忙

第 11 屆 iThome 鐵人賽

DAY 2
2
Software Development

高中生Kotlin實作30天系列 第 2

Day:02 排列組合計算機(RadioButton + for迴圈)

  • 分享至 

  • xImage
  •  

作業多到懷疑人生,所以就交給手機來算吧

Layout

RadioGroup & RadioButton

RadioButton是單選式的按鈕。在一個RadioGroup中可以有多個RadioButton,同時只能有一個RadioButton被點選

  • RadioGroup屬性設置

    • orientation
      RadioButton的顯示方向,"horizontal"代表水平,"vertical"代表垂直
  • RadioButton屬性設置

    • checked
      RadioButton的初始狀態,預設為"false","true"代表被點選
    <RadioGroup
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
             android:orientation="horizontal"
            app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent"
            android:layout_marginStart="8dp" android:layout_marginTop="8dp" android:id="@+id/radioGroup">
        <RadioButton
                android:text="P"
                android:checked="true"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" android:id="@+id/btn_p" android:layout_weight="1"/>
        <RadioButton
                android:text="C"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" android:id="@+id/btn_c" android:layout_weight="1"/>
        <RadioButton
                android:text="H"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content" android:id="@+id/btn_h" android:layout_weight="1"/>

Method

階乘

設置一個function計算階乘,輸入一個整數n,回傳n階乘

fun Factorial(n: Int): Int {
    var m = 1
    //i從1開始,每次迴圈加1,直到i=n+1
    for (i in 1 until n + 1) {
        m *= i
    }
    return m
}

計算公式

設置計算P、C、H三個公式的function

  • P
fun P(i: Int, j: Int) = Factorial(i) / Factorial(i - j)
  • C
fun C(i: Int, j: Int) = P(i, j) / Factorial(j)
  • H
fun H(i: Int, j: Int) = C(i + j - 1, j)

輸出結果

設置一個function,檢查EditText的輸入是否符合規則,並輸出結果

fun f(m:Int){
    //當輸入不為空時執行
    if(editText1.length()!=0 && editText2.length()!=0 ) {
        var i =editText1.text.toString().toInt()
        var j =editText2.text.toString().toInt()
        
        if(i>j && m!=2){
            when(m){
                0-> tv_out.text="${P(i,j)}"
                else-> tv_out.text="${C(i,j)}"
            }
        }
        if(i+j-1>j && m==2){
            tv_out.text="${H(i,j)}"
        }
    }
    else{
        tv_out.text=""
    }
}

監聽事件

OnCheckedChangeListener

RadioGroup專用的監聽事件,當被監聽的RadioGroup中點選的元件改變時觸發

第一個參數是被監聽的RadioGroup,第二個參數是被點選的RadioButton的ID

radioGroup.setOnCheckedChangeListener { radioGroup, i ->
}

辨認選定元件

辨認選定元件的方式有兩種:

  • 透過選定狀態
//使用.isChecked 可以得到RadioButton的選定狀態
if(btn_p.isChecked){
    mode = 0
    textView.text = "P"
}
else if(btn_p.isChecked){
    mode = 1
    textView.text = "C"
}
else{
    mode = 2
    textView.text = "H"
}
  • 透過OnCheckedChangeListener的第二個參數
//.id 可以得到RadioButton的id
if(i == btn_p.id){
    mode = 0
    textView.text = "P"
}
else if(i == btn_c.id){
    mode = 1
    textView.text = "C"
}
else(i == btn_h.id){
    mode = 2
    textView.text = "H"
}

實作成果


上一篇
Day 01 抽籤(TextView + random)
下一篇
Day03 貓咪鋼琴(上)(OnTouchListener)
系列文
高中生Kotlin實作30天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言