電卓を作ろう【クリア処理実装編】
今回はクリア処理の実装を行っていきます!
メインの計算処理は前回の記事をご覧ください!
それではやっていきましょう!
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. 演算ボタンの修正
以下のような流れでボタンが押されたことを考慮して、
演算ボタンを少しだけ直しておきます。
- 「10+6+」の状態でCボタンが押される
- tmpCalcNumには""が設定されている
- 「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. 動作確認
画像では伝わりにくいですが動かしてみます!
この状態でCボタンを押すと、、、
末尾の数字が消えました!
次にCAボタンを押してみます。
すべて削除されました!
Cボタン、CAボタンを押した後の計算結果も問題なかったです。
それでは今回はここまでです!
お疲れさまでした!!