的方式发生地方

Android 科学计算器

2014年12月1日15:42:10
by tops

思路:

1、布局

主布局使用LinearLayout,走向为垂直
使用TextView当作显示屏,显示计算结果
使用TableLayout当作输入表格
TableRow是每一行,其中包含四个按键
善用IDE的视图来设计布局也是很节省时间的
加减乘除的英语单词

2、代码

找到TextView,给按钮直接添加setOnClickListener事件
在MainActivity中实现监听接口并复写onClick方法,在方法里使用switch id的方法判断点击的是哪个按钮;

3、计算

使用数组或栈记录输入的数字和运算符,当输入第四个运算符时就先计算前面的算式为结果,再计算后面输入的。
创建一个Item类,用来表示数字或运算符,数组就放Item为元素;
当点击数字按键的时候给TextView.append数字,点击加减乘除计算时从TextView.getText并转换为数字,转换为Item类添加到数组中;
然后调用检查并计算的方法
如果数组元素大于3,判断数组中第二个元素是什么运算符,再获取第一个元素和第三个元素作为计算数字进行计算。这时清空数组。
当计算完毕之后将计算结果添加到数组第一个元素。
那么计算小数和计算结果为整数时不要显示小数点都应该优化,思考一下

注:另外一种计算方式就是将输入的内容搞成一个数组,然后在点击等号的时候才开始计算。

本例的缺点是没有回删键,比如输入错了可以往前删一个数字或运算符。

代码:

/Calculator/src/com/tops/calculator/MainActivity.java
 java /**  *   * 10+20-8=  *   */ package com.tops.calculator; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.os.Bundle; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.TextView; public class MainActivity extends Activity implements OnClickListener {     private TextView tvScreen;     private List items = new ArrayList();     @Override     protected void onCreate(Bundle savedInstanceState) {         super.onCreate(savedInstanceState);         setContentView(R.layout.activity_main);         // 第一步,寻找控件并给按钮添加监听事件         tvScreen = (TextView) findViewById(R.id.tvScreen);         findViewById(R.id.btn0).setOnClickListener(this);         findViewById(R.id.btn1).setOnClickListener(this);         findViewById(R.id.btn2).setOnClickListener(this);         findViewById(R.id.btn3).setOnClickListener(this);         findViewById(R.id.btn4).setOnClickListener(this);         findViewById(R.id.btn5).setOnClickListener(this);         findViewById(R.id.btn6).setOnClickListener(this);         findViewById(R.id.btn7).setOnClickListener(this);         findViewById(R.id.btn8).setOnClickListener(this);         findViewById(R.id.btn9).setOnClickListener(this);         findViewById(R.id.btnX).setOnClickListener(this);         findViewById(R.id.btnAdd).setOnClickListener(this);         findViewById(R.id.btnSub).setOnClickListener(this);         findViewById(R.id.btnResult).setOnClickListener(this);         findViewById(R.id.btnClear).setOnClickListener(this);         findViewById(R.id.btnDiv).setOnClickListener(this);     }     /**      * 复写OnClickListener接口的onClick方法,用来判断输入      */     @Override     public void onClick(View v) {         switch (v.getId()) {         case R.id.btn0:             tvScreen.append("0");             break;         case R.id.btn1:             tvScreen.append("1");             break;         case R.id.btn2:             tvScreen.append("2");             break;         case R.id.btn3:             tvScreen.append("3");             break;         case R.id.btn4:             tvScreen.append("4");             break;         case R.id.btn5:             tvScreen.append("5");             break;         case R.id.btn6:             tvScreen.append("6");             break;         case R.id.btn7:             tvScreen.append("7");             break;         case R.id.btn8:             tvScreen.append("8");             break;         case R.id.btn9:             tvScreen.append("9");             break;         // 点击加号按钮         case R.id.btnAdd:             // 给数组添加数字元素             items.add(new Item(Double                     .parseDouble(tvScreen.getText().toString()), Types.NUM));             // 检查是否可以计算,如果可以则进行计算             checkAndCompute();             // 给数组添加加号运算符             items.add(new Item(0, Types.ADD));             // 清空显示屏             tvScreen.setText("");             break;         case R.id.btnSub:             items.add(new Item(Double                     .parseDouble(tvScreen.getText().toString()), Types.NUM));             checkAndCompute();             items.add(new Item(0, Types.SUB));             tvScreen.setText("");             break;         case R.id.btnX:             items.add(new Item(Double                     .parseDouble(tvScreen.getText().toString()), Types.NUM));             checkAndCompute();             items.add(new Item(0, Types.X));             tvScreen.setText("");             break;         case R.id.btnDiv:             items.add(new Item(Double                     .parseDouble(tvScreen.getText().toString()), Types.NUM));             checkAndCompute();             items.add(new Item(0, Types.DIV));             tvScreen.setText("");             break;         // 点击清楚屏幕按钮,显示屏清空,计算的数组清空         case R.id.btnClear:             tvScreen.setText("");             items.clear();             break;         // 点击等号按钮,计算并显示结果,数组清空         case R.id.btnResult:             items.add(new Item(Double                     .parseDouble(tvScreen.getText().toString()), Types.NUM));             checkAndCompute();             tvScreen.setText(items.get(0).value + "");             items.clear();             break;         }     }     /**      * 检查数组的内容是否可以计算,如果可以就计算      */     public void checkAndCompute() {         if (items.size() >= 3) {             double a = items.get(0).value;             double b = items.get(2).value;             int opt = items.get(1).type;             items.clear();             switch (opt) {             case Types.ADD:                 items.add(new Item(a + b, Types.NUM));                 break;             case Types.SUB:                 items.add(new Item(a - b, Types.NUM));                 break;             case Types.X:                 items.add(new Item(a * b, Types.NUM));                 break;             case Types.DIV:                 items.add(new Item(a / b, Types.NUM));                 break;             }         }     }     @Override     public boolean onCreateOptionsMenu(Menu menu) {         // Inflate the menu; this adds items to the action bar if it is present.         getMenuInflater().inflate(R.menu.main, menu);         return true;     } }
/Calculator/src/com/tops/calculator/Item.java

package com.tops.calculator;
public class Item {
public Item(double value,int type) {
this.value= value;
this.type=type;
}

public double value = 0;

public int type  = 0;
}

/Calculator/src/com/tops/calculator/Types.java

package com.tops.calculator;
public class Types {
public static final int ADD = 1;
public static final int SUB = 2;
public static final int X = 3;
public static final int DIV = 4;
public static final int NUM = 5;

}

/Calculator/res/layout/activity_main.xml

    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
            android:id="@+id/tvScreen"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text=""
        android:gravity="right"
        android:textAppearance="?android:attr/textAppearanceLarge" />
            android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="1" >
                    android:layout_width="fill_parent"
            android:layout_height="wrap_content" >
                            android:id="@+id/btn1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="1" />
                            android:id="@+id/btn2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="2" />
                            android:id="@+id/btn3"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="3" />
                            android:id="@+id/btnAdd"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="+" />
        
                    android:layout_width="fill_parent"
            android:layout_height="wrap_content" >
                            android:id="@+id/btn4"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="4" />
                            android:id="@+id/btn5"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="5" />
                            android:id="@+id/btn6"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="6" />
                            android:id="@+id/btnSub"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="-" />
        
                    android:layout_width="fill_parent"
            android:layout_height="wrap_content" >
                            android:id="@+id/btn7"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="7" />
                            android:id="@+id/btn8"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="8" />
                            android:id="@+id/btn9"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="9" />
                            android:id="@+id/btnX"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="*" />
        
                    android:layout_width="fill_parent"
            android:layout_height="wrap_content" >
                            android:id="@+id/btnClear"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="C" />
                            android:id="@+id/btn0"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="0" />
                            android:id="@+id/btnResult"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="=" />
                            android:id="@+id/btnDiv"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_weight="1"
                android:text="/" />
        
    

你可能感兴趣的:(的方式发生地方)