こんばんは,さかなです.

 

前回は記号の表示ができるようになるまでをやりました.

今回は四則演算記号が押された時に値を保存できるようになるまでです.

 

最初は,四則演算記号が押された際に配列化したtextViewに入っている数値を取り出して保存する方向でやっていましたが,どうやらtextViewに数字や記号が一文字ずつ入らないようです.

例えば,”11+321+”と入力した場合,textViewの中身は

textView[0] = 1,textView[1] = 11,textView[2] = 11+,textView[3] = 11+3,...

のようになっていましたので,他の方法を考えることにしました.

 

 

まず,フィールドとして四則演算記号が押された時に,その時のcountを保存しておくためのint型変数calcCount(初期値=0)と,

textViewとは別に押されたボタンによって数値を保存するInteger型可変長配列numberを新たに追加しました.

 

 

数字ボタンが押された際の処理です.

textViewの動作は変えず,新たに押されたボタンに対応する数字を配列numberに追加する処理を書き加えました.

 

 

四則演算記号ボタンが押された際の処理です.

とりあえず今回はボタンが押されたらnumberに”0”を追加し,calcCountにその時のcountを保存する処理を書き加えています.

更に,number,count,calcCountを引数に持つメソッドvaluePreservationを呼び出しています.

 

 

上記画像がメソッドvaluePreservationの中身です.

まず,記号ボタンが押された際にそれまでの数値を保存するString型変数value(初期値は空),String型のvalueをint型に変換して保存するtrueValueを宣言しています.

 

次に,最初に記号ボタンが押された時と2回目以降ボタンが押された時で場合分けをしていきます.(calcCountの初期値を0としたのはこの場合分けのためです.)

今この記事を書いていて気づきましたが,書いてある処理が同じなので場合分けする必要はなかったみたいですね….

 

for(int i = calcCount ; i <count ; i++) {

    value += String.valueOf(number.get(i))

}

ここでnumberの中身から数字部分だけを取り出し(”+”ボタンの数値”0”は含めずに),valueに足していきます.ここでvalueがint型だと,足していくときに計算してしまうため,valueはString型とし,文字列として数字をつなぎ合わせています.(例えばvalueがint型の場合,123と入力していた時,valueは6となってしまいます.)

 

そして,String型のvalueをint型に変換してint型のtrueValueに入れています.

 

System.out.println(trueValue);

でアプリを実行したときにログでうまく値が保存できているかを確認しています.

 

以下が,アプリの実行画面とその時のログ(System.out)です.

 

 

 

TextViewでは計算式がちゃんと表示されています.

また,上のログの画像を見ればわかるように,記号ボタンが押された際にちゃんと記号を抜いたそれまでに入力された数字がtrueValueに保存されています.

 

 

今回はここまで.

このままでは計算するときに使えませんので,次回はこのメソッドに手を加えたり,”=”が押された際に計算するところまでいけたらいいなと思っています.