電卓アプリを作ってみるシリーズ一覧はこちらをクリック
第1回から見たい人は下のリンクから↓↓
出来たー!!
あとがき
多分いっぱいバグあるんだろうなー、変数名長すぎたなー、直そうかなとも考えたけどコード変えて記事の画像も変えて…って大変なのでもういいか。うん、良しとします。
もし次に何かアプリを作るときのヒントになると信じてこのままにしておこうと思います。
package com.example.calculatorapplication
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import com.example.calculatorapplication.databinding.ActivityMainBinding
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
val view = binding.root
setContentView(view)
// 値を格納する変数
var valueForTempStorage = 0.0 // 一時保存用の値
var valueForCalc1st = 0.0 // 計算用の値1番目
var valueForCalc2nd = 0.0 // 計算用の値2番目
var valueForResults = 0.0 // 結果用の値
// 記号を格納する変数
var symbolForTempStorage = "" // 一時保存用の記号
// 小数チェック用の変数
var stringForPointZeroCheck = "" // .0チェック用の文字列
var flagForDecimal = false // 小数チェック用のフラグ
var flagForDecimal2 = false // 小数チェック用のフラグ2
// 関数(fun)数字(numbers)タップした(Tapped)
fun numbersTapped(namString: String) {
if (flagForDecimal2 == true) {
// 結果画面の文字と押された数字を結合して結果画面に表示する
binding.textViewValuedisplay.text = binding.textViewValuedisplay.text.toString() + namString
// 一時保存用の値にダブル型で結果を入れておく
valueForTempStorage = binding.textViewValuedisplay.text.toString().toDouble()
}
else {
valueForTempStorage = valueForTempStorage * 10 + namString.toInt()
binding.textViewValuedisplay.text = valueForTempStorage.toInt().toString()
}
}
// 関数(fun)演算子(operator)タップした(Tapped)
fun operatorTapped() {
if (valueForCalc1st == 0.0 && symbolForTempStorage == "") {
valueForCalc1st = valueForTempStorage
valueForTempStorage = 0.0
}
else if (valueForCalc2nd == 0.0) {
valueForCalc2nd = valueForTempStorage
valueForTempStorage = 0.0
if (symbolForTempStorage == "+") {
valueForResults = valueForCalc1st + valueForCalc2nd
}
else if (symbolForTempStorage == "-") {
valueForResults = valueForCalc1st - valueForCalc2nd
}
else if (symbolForTempStorage == "*") {
valueForResults = valueForCalc1st * valueForCalc2nd
}
else if (symbolForTempStorage == "/") {
valueForResults = valueForCalc1st / valueForCalc2nd
}
else if (symbolForTempStorage == "=") {
return
}
stringForPointZeroCheck = valueForResults.toString()
stringForPointZeroCheck = stringForPointZeroCheck.indexOf(".0").toString()
if (stringForPointZeroCheck == "-1") {
flagForDecimal = true
}
if (flagForDecimal) {
binding.textViewValuedisplay.text = valueForResults.toString()
}
else {
binding.textViewValuedisplay.text = valueForResults.toInt().toString()
}
valueForCalc1st = valueForResults
valueForCalc2nd = 0.0
valueForResults = 0.0
flagForDecimal = false
}
flagForDecimal2 = false
}
// 0ボタンが押された時
binding.buttonZero.setOnClickListener {
numbersTapped("0")
}
// 1ボタンが押された時
binding.buttonOne.setOnClickListener {
numbersTapped("1")
}
// 2ボタンが押された時
binding.buttonTwo.setOnClickListener {
numbersTapped("2")
}
// 3ボタンが押された時
binding.buttonThree.setOnClickListener {
numbersTapped("3")
}
// 4ボタンが押された時
binding.buttonFour.setOnClickListener {
numbersTapped("4")
}
// 5ボタンが押された時
binding.buttonFive.setOnClickListener {
numbersTapped("5")
}
// 6ボタンが押された時
binding.buttonSix.setOnClickListener {
numbersTapped("6")
}
// 7ボタンが押された時
binding.buttonSeven.setOnClickListener {
numbersTapped("7")
}
// 8ボタンが押された時
binding.buttonEight.setOnClickListener {
numbersTapped("8")
}
// 9ボタンが押された時
binding.buttonNine.setOnClickListener {
numbersTapped("9")
}
// .ボタンが押された時
binding.buttonPoint.setOnClickListener {
// いきなり"."が押された場合は無視する、"."連打も無視する
if (binding.textViewValuedisplay.text != "" && flagForDecimal2 != true) {
flagForDecimal2 = true
numbersTapped(".")
}
}
// +ボタンが押されたとき
binding.buttonAddition.setOnClickListener {
operatorTapped ()
symbolForTempStorage = "+"
}
// -ボタンが押されたとき
binding.buttonSubtraction.setOnClickListener {
operatorTapped ()
symbolForTempStorage = "-"
}
// ×ボタンが押されたとき
binding.buttonMultiplication.setOnClickListener {
operatorTapped ()
symbolForTempStorage = "*"
}
// ÷ボタンが押されたとき
binding.buttonDivision.setOnClickListener {
operatorTapped ()
symbolForTempStorage = "/"
}
// =ボタンが押されたとき
binding.buttonEqual.setOnClickListener {
operatorTapped ()
symbolForTempStorage = "="
}
// ACボタンが押されたとき
binding.buttonAllClear.setOnClickListener {
valueForTempStorage = 0.0
valueForCalc1st = 0.0
valueForCalc2nd = 0.0
valueForResults = 0.0
flagForDecimal = false
flagForDecimal2 = false
symbolForTempStorage = ""
binding.textViewValuedisplay.text = ""
}
}
コメント