電卓できない

スポンサーリンク
スポンサーリンク

まだ早かったか・・・

なにができないか

式が表示されていくのではなく、数字が表示されていくような形式の

電卓を目指していた。

ボタンにリスナは設定できた。

一個目の数字と二個目の数字を足し算するのをまずは作ろうとした。

public void onClick(View view) {
    TextView output = findViewById(R.id.tvOutput);
    TextView inpop = findViewById(R.id.tvOp);
    String inpb = output.getText().toString();
    String inpa = output.getText().toString();

    int id = view.getId();
    switch(id){
        case R.id.button1:
            if (inpop.getText().toString() != ""){
                inpb = inpb + "1";
                output.setText(inpb);
            }else{
                inpa = inpa + "1";
                output.setText(inpa);
            }
            break;

        case R.id.buttonplus:
            inpop.setText("+");
            break;

        case R.id.buttonequal:
            double calca = Double.valueOf(inpa);
            double calcb = Double.valueOf(inpb);

            switch(inpop.getText().toString()) {
                case "+":
                    output.setText(String.valueOf(calca + calcb));
                    break;
                case "-":
                    output.setText(String.valueOf(calca - calcb));
                    break;
                case "*":
                    output.setText(String.valueOf(calca * calcb));
                    break;
                case "/":
                    output.setText(String.valueOf(calca / calcb));
                    break;
            }
            break;
    }


}

これで「1+1=」とタップしていくと、、、

  1. 「1」→「01」
  2. 「+」→「01」
  3. 「1」→「011」
  4. 「=」→「22.0」

という表示になる。

1.「1」→「01」

先頭に「0」がつく。これはまあ分かる。

textviewの値をgettextで取ってきてそのまま文字を結合してるから。

2.「+」→「01」

これは大丈夫そう。

前の記事の外観から、演算子を表示させる外観に変更した。

そこに、演算子ボタンが押されたら表示するようにし、計算に利用しようと思った。

3.「1」→「011」

ここなぁ。

演算子押されたら二個目の変数に足してく、とは思ったんだけど

二個目の変数も表示の文字列をそのまま持ってくるから、01に1で「011」

になると。結果を見るとそりゃそうだってなるけどさ。

でも解決方法がおもいつかないなぁ。表示用変数を二個とか?

どのタイミングで二個目の変数初期化してあげればとか。

そもそもの設計?が変だからなんだろうけど、じゃあどうすればっていうのがなぁ。

分からんちん。

4.「=」→「22.0」

3に起因してるんだと思う。

calcaもcalcbも表示されてる数字を持ってきて計算してるから

3の時点で表示されている「011」同士を計算してしまう。

「.0」がつくのはdouble→stringに変換した時にはこうなってしまうって感じなのかな。

 

ダメダメやんな。。。もうちょっと簡単にできるかなぁと思っていたけど

考えが及んでないところが多すぎる気がする。

上記のコード書くまでにも紆余曲折あったがそれは書くのめんどい。

どうしよっかな、何かしらの入門本買ってそっちからやろうかしら。

コメント

タイトルとURLをコピーしました