fun division(){
val numerator = 1000
var denominator = 4
var index = 1
val outputText = ("Result is ${numerator / denominator}")
val indexText: TextView = findViewById(Rid.index_textview)
val divisionText: TextView = findViewById(R.id.division_textView)
repeat(3){ //repeats block three times
Log.v(TAG, "${numerator / denominator}")//logs output to Logcat
divisionText.text= outputText //outputs the calculation text to emulator
indexText.text = ("Index is $index") //outputs the index value text to emulator
Thread.sleep(1000)//milliseconds //pauses 1 second between repeats
denominator-- //decrements denominator by 1
index //increments index by 1
}
}
當代碼(此處不完整)在模擬器上的 Android Studio 中運行時,我為每個 indexText 和 DivisionText 得到一行文本,而不是預期的三個。此外,divisionText 的輸出為 250,indexText 為 3。Android Studio logcat 正確輸出每個除法計算。當我在 Kotlin 操場上運行代碼時,代碼為我提供了 indexText 和 DivisionText 各三行。但是,indexText 值輸出正確,每個重復回圈再增加一個,而分子/分母的計算僅在每個重復行回圈上輸出“相同”的最終計算。
uj5u.com熱心網友回復:
您在 UI 執行緒上有一個 sleep 陳述句,它會阻止 UI 并阻止對顯示的值進行任何更新,直到全部完成。使用帶有延遲的協程來讓數字以 1 秒的間隔正確更新,如下所示:
fun division(){
val numerator = 1000
var denominator = 4
var index = 1
val indexText: TextView = findViewById(Rid.index_textview)
val divisionText: TextView = findViewById(R.id.division_textView)
lifecycleScope.launch {
repeat(3) {
Log.v(TAG, "${numerator / denominator}")
divisionText.text= "Result is ${numerator / denominator}"
indexText.text = "Index is $index"
delay(1000) //milliseconds
denominator--
index
}
}
}
您還需要將您的字串創建移動到回圈內部,以便它在每個回圈中正確更新(在您的outputText變數保持不變之前,當變數更新時不會改變)。
注意:您還使用整數除法,因此您的結果將是整數,而不是浮點數。如果你想要十進制輸出,你需要先將結果轉換為雙精度,像這樣
val result = numerator / denominator.toDouble()
divisionText.text = "Result is $result"
或者只是將您的分子更改為像這樣的浮點型別
val numerator = 1000.0
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/411093.html
標籤:
