Android x Kotlin 實作課程:打造個人專屬計算機 APP EP6 計算機邏輯

閱讀時間約 9 分鐘

打造個人專屬計算機 APP 系列文章目錄:
https://vocus.cc/article/65acea9ffd897800019c13dc

課程摘要

本課程學習如何實作處理加、減、乘和除按鈕等計算機相關邏輯。

教學影片

若您無法順利觀看教學影片,請先登入您的 YouTube 帳號,然後點擊以下連結加入我們的頻道會員:

  • 一般會員:成為一般會員後,您將能夠觀看我們所提供的一般會員專屬線上課程。
  • 精實會員:成為精實會員後,您將能夠觀看我們所提供的精實會員專屬線上課程。

範例程式碼

MainActivity.kt

private var processText = ""
private var isFirstInput = true
private var isCalculated = false

onCreate

if (isCalculated && buttonText in "0".."9") {
processText = ""
processTextView.text = ""
resultTextView.text = ""
isFirstInput = true
isCalculated = false
}
when (buttonText) {
//計算機按鈕相關邏輯​
}

AC 按鈕邏輯

"AC" -> {
processText = ""
processTextView.text = ""
resultTextView.text = ""
isFirstInput = true
isCalculated = false
}

= 按鈕邏輯

"=" -> {
if (!isFirstInput) {
val result = evaluate(processText)
// 格式化結果以去除不必要的小數點
resultTextView.text = if (result.contains(".0")) {
result.dropLast(2)
} else {
result
}
isCalculated = true
}
}

+/- 按鈕邏輯

"+/-" -> {
if (processText.isNotEmpty() && processText.toDoubleOrNull() != null && processText.toDouble() != 0.0) {
processText = if (processText.startsWith("-")) {
processText.drop(1)
} else {
"-$processText"
}
processTextView.text = processText
}
}

Backspace 按鈕邏輯

"⌫" -> {
if (processText.isNotEmpty()) {
processText = processText.dropLast(1)
processTextView.text = processText
}
}

. 小數點按鈕邏輯

"." -> {
if (!processText.endsWith(".") && !processText.contains(" .") && !processText.endsWith(
" "
)
) {
processText += if (isFirstInput || processText.last()
.isWhitespace()
) "0" else ""
processText += buttonText
processTextView.text = processText
isFirstInput = false
}
}

else 不是以上相關按鈕邏輯

else -> {
if (buttonText in listOf("+", "-", "*", "/")) {
if (!isFirstInput && !processText.endsWith(" ")) {
processText += " $buttonText "
processTextView.text = processText
isFirstInput = true
}
} else {
processText += buttonText
processTextView.text = processText
isFirstInput = false
}
}

evaluate 函數

private fun evaluate(process: String): String {
return try {
val parts = process.split(" ")
var result = parts[0].toDouble()
var i = 1
while (i < parts.size) {
val operator = parts[i]
val nextNumber = parts[i + 1].toDouble()
when (operator) {
"+" -> result += nextNumber
"-" -> result -= nextNumber
"*" -> result *= nextNumber
"/" -> result /= nextNumber
}
i += 2
}
// 檢查結果是否為整數,並相應地格式化輸出
if (result % 1.0 == 0.0) {
result.toInt().toString()
} else {
result.toString()
}
} catch (e: Exception) {
"Error" // 錯誤時返回 "Error"
}
}
avatar-img
11會員
243內容數
哈囉!歡迎光臨我的沙龍!我是 KT,一位對應用程式開發充滿熱情的開發者。在這個專屬空間,我將與您分享我在應用開發領域的深入學習心得和豐富的實戰經驗。如果您對應用程式開發技術同樣充滿好奇,渴望不斷探索新知,歡迎成為我們的會員,一起在應用程式開發的旅途上,探索更深層次的技術世界,享受學習的樂趣。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
HKT實驗室 的其他內容
本課程學習如何使用 Gson 解析資料。
本課程學習如何解析 JSON 資料。
本課程學習如何使用 使用 OkHttp 獲取網路資料方式。
您將學到如何利用 MVVM 架構來開發一個計數器應用程式。您將了解 ViewModel 的作用和用法,以及如何使用 LiveData 來實現資料的動態更新。
本課程學習如何使用 Gson 解析資料。
本課程學習如何解析 JSON 資料。
本課程學習如何使用 使用 OkHttp 獲取網路資料方式。
您將學到如何利用 MVVM 架構來開發一個計數器應用程式。您將了解 ViewModel 的作用和用法,以及如何使用 LiveData 來實現資料的動態更新。
你可能也想看
Google News 追蹤
Thumbnail
此文件的目的是教授 Kotlin 程式語言的運算符,包括算數運算子、比較運算子、賦值運算子、位元運算子以及運算子的優先等級。這將有助於讀者更好地理解和撰寫 Kotlin 程式碼。
Thumbnail
了解這些運算子及其優先等級有助於更好地理解和編寫 JavaScript 代碼
Thumbnail
此文件的目的是教授 Kotlin 程式語言的運算符,包括算數運算子、比較運算子、賦值運算子、位元運算子以及運算子的優先等級。這將有助於讀者更好地理解和撰寫 Kotlin 程式碼。
Thumbnail
了解這些運算子及其優先等級有助於更好地理解和編寫 JavaScript 代碼