アプリ開発初心者の暇つぶしAndroid体験記

アプリ開発初心者がAndroidアプリ開発始めました。日々学んだことをアウトプットしていきます。

電卓を作ろう【クリア処理実装編】

今回はクリア処理の実装を行っていきます!

メインの計算処理は前回の記事をご覧ください!
それではやっていきましょう!

1. Cボタンの実装

今回の電卓ではCボタンは末尾の一文字を消す処理とします。
大きく、演算記号を消した時と数字を消した時で動きが変わります。
では、実装を見ていきます!

case R.id.clear:
    if (calc.getText().toString().endsWith("+") ||
        calc.getText().toString().endsWith("-") ||
        calc.getText().toString().endsWith("*") ||
        calc.getText().toString().endsWith("/") ) {
        
        // 演算記号を消す場合
        calcList.remove(calcList.size() -1 );
        tmpCalcNum = "";

    } else {

        // 演算記号以外を消す場合
        tmpCalcNum = tmpCalcNum.substring(0,tmpCalcNum.length() - 1);

    }

    // 表示文字列の最後の文字を削除する
    viewNum = calc.getText().toString().substring(0,calc.getText().toString().length()-1);
    calc.setText(viewNum);

    break;

演算記号を削除する場合、計算用に作っているcalcListの最後の要素にはこの演算記号が入っています。

演算記号が入っている要素をList#removeを使って削除します。
List#removeの引数には削除する要素を番号で指定します。
最初の要素は0、最後の要素はリストサイズ -1 になるので、今回はcalcList.size() - 1ですね。

演算記号以外を削除する場合は、tmpCalcNumの末尾を削除します。
tmpCalcNumには直近の演算項が入っています。(詳細は計算処理実装編)

2. CAボタンの実装

CAはすべて初期化する処理とするため、そこまで複雑ではないですね!

case R.id.clearall:
    // 表示文字の初期化
    calc.setText("");
    // 演算モードの初期化
    calcMode = "";
    // 計算用リストの初期化
    calcList.clear();
    // 直近の演算項を初期化
    tmpCalcNum = "";
    break;

処理に出てくる変数を順々に初期化しています。

3. 演算ボタンの修正

以下のような流れでボタンが押されたことを考慮して、
演算ボタンを少しだけ直しておきます。

  1. 「10+6+」の状態でCボタンが押される
    • tmpCalcNumには""が設定されている
  2. 「10+6」の状態で-ボタンが押される
    • tmpCalcNumには""が設定されたまま、calcListにaddされてしまう(←想定外の動き)

なので、各演算ボタンに1つだけ分岐を設けます。

case R.id.plus:
    if (!tmpCalcNum.equals("")) {
        calcList.add(tmpCalcNum);
    }
    calcList.add("+");

    viewNum = calc.getText().toString() + "+";
    calc.setText(viewNum);

    tmpCalcNum = "";

    break;

tmpCalcNumが""である場合は、calcListへのaddを行いません。

4. 動作確認

画像では伝わりにくいですが動かしてみます!
f:id:mtnanao:20200224185745p:plain

この状態でCボタンを押すと、、、
f:id:mtnanao:20200224185756p:plain
末尾の数字が消えました!

次にCAボタンを押してみます。
f:id:mtnanao:20200224185805p:plain
すべて削除されました!

Cボタン、CAボタンを押した後の計算結果も問題なかったです。


それでは今回はここまでです!
お疲れさまでした!!