電卓 | My Footprint

My Footprint

どんな靴を履いてても、歩けば僕の足跡。
目標に向かって歩き続ける日々を書いていくブログです。

androidの本もキリのいいところまで進んだので、暇つぶしに電卓作ってみました。


まぁ1時間ぐらいで作れるだろうと軽い気持ちではじめたんですが・・・・



以外にめんどくさい汗



androidの技術的にはなんら難しいことはしていないんですが


今回作ったのはandroidにデフォルトで入ってる電卓とおんなじ機能にしました。



式を入力して一気に計算させるタイプです。


2+3×4-5÷-3 のような式を入力すると答えを出してくれるタイプです。



これを計算する処理がめんどくさかった汗



というのも、ネット探せばすぐソースが出てきそうなものですが、無駄に意地をはって処理を全部自分で考えてつくったので、結局つくるのに半日くらいかかってしまいました(;´▽`A``


如何せんオリジナルの処理なので以下のように汚いコードになってしまいました叫び

for(int i = 0;s1.hasNext();){ // +でトークン化
s = s1.next();
sub.clear();
if(s.length() != 1){
sum.add(s);
s2 = new Scanner(sum.get(i));
s2.useDelimiter(" \\-");
for(int j = 0;s2.hasNext();){ // -でトークン化
s = s2.next();
mul.clear();
if(s.length() != 1){
sub.add(s);
s3 = new Scanner(sub.get(j));
s3.useDelimiter("×");
for(int l = 0;s3.hasNext();){ // *でトークン化

            ・・・・・・・・・・・・ (以下汚いコードが続く)


式を+、-、×、÷で分解していって計算しているのですが果たして最適なやり方かどうかは謎です。



今回はあまりandroidのテクニックをつかうものじゃなかったので、Javaもandroidも初めてという人のためにちょっと使えそうなテクニックを。



使うボタンが多い時は、以下のようにすると楽です。



// ボタンのidを全部入れておく
int[] buttons = {
R.id.zero,R.id.one,R.id.two,R.id.three,R.id.four,R.id.five,
R.id.six,R.id.seven,R.id.eight,R.id.nine,R.id.div_bottun,
R.id.mul_button,R.id.sub_button,R.id.sum_button,R.id.dot,
R.id.equal_button,R.id.all_clear,R.id.clear
}; 

// ボタンを拡張forループでリスナーに一括登録
Button b;
for(int id : buttons){
b = (Button)findViewById(id);
b.setOnClickListener(this);
}




今回はたったこれだけですがこれからもっとましなもの書けるように頑張りますあせる



そろそろアプリを作ろう!