首页 > 学院 > 开发设计 > 正文

的方式发生地方

2019-11-14 22:23:43
字体:
来源:转载
供稿:网友
的方式发生地方Android?科学计算器

2014年12月1日15:42:10by?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="/"?/>????????????

上一篇:Lucene初试

下一篇:Java Se:Java Security

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表