Android -计算器的实现

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

  1. /**
  2. *
  3. * 10+20-8=
  4. *
  5. */
  6. package com.tops.calculator;
  7. import java.util.ArrayList;
  8. import java.util.List;
  9. import android.app.Activity;
  10. import android.os.Bundle;
  11. import android.view.Menu;
  12. import android.view.View;
  13. import android.view.View.OnClickListener;
  14. import android.widget.TextView;
  15. public class MainActivity extends Activity implements OnClickListener {
  16. private TextView tvScreen;
  17. private List items = new ArrayList();
  18. @Override
  19. protected void onCreate(Bundle savedInstanceState) {
  20. super.onCreate(savedInstanceState);
  21. setContentView(R.layout.activity_main);
  22. // 第一步,寻找控件并给按钮添加监听事件
  23. tvScreen = (TextView) findViewById(R.id.tvScreen);
  24. findViewById(R.id.btn0).setOnClickListener(this);
  25. findViewById(R.id.btn1).setOnClickListener(this);
  26. findViewById(R.id.btn2).setOnClickListener(this);
  27. findViewById(R.id.btn3).setOnClickListener(this);
  28. findViewById(R.id.btn4).setOnClickListener(this);
  29. findViewById(R.id.btn5).setOnClickListener(this);
  30. findViewById(R.id.btn6).setOnClickListener(this);
  31. findViewById(R.id.btn7).setOnClickListener(this);
  32. findViewById(R.id.btn8).setOnClickListener(this);
  33. findViewById(R.id.btn9).setOnClickListener(this);
  34. findViewById(R.id.btnX).setOnClickListener(this);
  35. findViewById(R.id.btnAdd).setOnClickListener(this);
  36. findViewById(R.id.btnSub).setOnClickListener(this);
  37. findViewById(R.id.btnResult).setOnClickListener(this);
  38. findViewById(R.id.btnClear).setOnClickListener(this);
  39. findViewById(R.id.btnDiv).setOnClickListener(this);
  40. }
  41. /**
  42. * 复写OnClickListener接口的onClick方法,用来判断输入
  43. */
  44. @Override
  45. public void onClick(View v) {
  46. switch (v.getId()) {
  47. case R.id.btn0:
  48. tvScreen.append("0");
  49. break;
  50. case R.id.btn1:
  51. tvScreen.append("1");
  52. break;
  53. case R.id.btn2:
  54. tvScreen.append("2");
  55. break;
  56. case R.id.btn3:
  57. tvScreen.append("3");
  58. break;
  59. case R.id.btn4:
  60. tvScreen.append("4");
  61. break;
  62. case R.id.btn5:
  63. tvScreen.append("5");
  64. break;
  65. case R.id.btn6:
  66. tvScreen.append("6");
  67. break;
  68. case R.id.btn7:
  69. tvScreen.append("7");
  70. break;
  71. case R.id.btn8:
  72. tvScreen.append("8");
  73. break;
  74. case R.id.btn9:
  75. tvScreen.append("9");
  76. break;
  77. // 点击加号按钮
  78. case R.id.btnAdd:
  79. // 给数组添加数字元素
  80. items.add(new Item(Double
  81. .parseDouble(tvScreen.getText().toString()), Types.NUM));
  82. // 检查是否可以计算,如果可以则进行计算
  83. checkAndCompute();
  84. // 给数组添加加号运算符
  85. items.add(new Item(0, Types.ADD));
  86. // 清空显示屏
  87. tvScreen.setText("");
  88. break;
  89. case R.id.btnSub:
  90. items.add(new Item(Double
  91. .parseDouble(tvScreen.getText().toString()), Types.NUM));
  92. checkAndCompute();
  93. items.add(new Item(0, Types.SUB));
  94. tvScreen.setText("");
  95. break;
  96. case R.id.btnX:
  97. items.add(new Item(Double
  98. .parseDouble(tvScreen.getText().toString()), Types.NUM));
  99. checkAndCompute();
  100. items.add(new Item(0, Types.X));
  101. tvScreen.setText("");
  102. break;
  103. case R.id.btnDiv:
  104. items.add(new Item(Double
  105. .parseDouble(tvScreen.getText().toString()), Types.NUM));
  106. checkAndCompute();
  107. items.add(new Item(0, Types.DIV));
  108. tvScreen.setText("");
  109. break;
  110. // 点击清楚屏幕按钮,显示屏清空,计算的数组清空
  111. case R.id.btnClear:
  112. tvScreen.setText("");
  113. items.clear();
  114. break;
  115. // 点击等号按钮,计算并显示结果,数组清空
  116. case R.id.btnResult:
  117. items.add(new Item(Double
  118. .parseDouble(tvScreen.getText().toString()), Types.NUM));
  119. checkAndCompute();
  120. tvScreen.setText(items.get(0).value + "");
  121. items.clear();
  122. break;
  123. }
  124. }
  125. /**
  126. * 检查数组的内容是否可以计算,如果可以就计算
  127. */
  128. public void checkAndCompute() {
  129. if (items.size() >= 3) {
  130. double a = items.get(0).value;
  131. double b = items.get(2).value;
  132. int opt = items.get(1).type;
  133. items.clear();
  134. switch (opt) {
  135. case Types.ADD:
  136. items.add(new Item(a + b, Types.NUM));
  137. break;
  138. case Types.SUB:
  139. items.add(new Item(a - b, Types.NUM));
  140. break;
  141. case Types.X:
  142. items.add(new Item(a * b, Types.NUM));
  143. break;
  144. case Types.DIV:
  145. items.add(new Item(a / b, Types.NUM));
  146. break;
  147. }
  148. }
  149. }
  150. @Override
  151. public boolean onCreateOptionsMenu(Menu menu) {
  152. // Inflate the menu; this adds items to the action bar if it is present.
  153. getMenuInflater().inflate(R.menu.main, menu);
  154. return true;
  155. }
  156. }

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

  1. package com.tops.calculator;
  2. public class Item {
  3. public Item(double value,int type) {
  4. this.value= value;
  5. this.type=type;
  6. }
  7. public double value = 0;
  8. public int type = 0;
  9. }

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

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

/Calculator/res/layout/activity_main.xml

  1. xmlns:tools="http://schemas.android.com/tools"
  2. android:layout_width="match_parent"
  3. android:layout_height="match_parent"
  4. android:orientation="vertical" >
  5. android:id="@+id/tvScreen"
  6. android:layout_width="match_parent"
  7. android:layout_height="wrap_content"
  8. android:text=""
  9. android:gravity="right"
  10. android:textAppearance="?android:attr/textAppearanceLarge" />
  11. android:layout_width="fill_parent"
  12. android:layout_height="wrap_content"
  13. android:layout_weight="1" >
  14. android:layout_width="fill_parent"
  15. android:layout_height="wrap_content" >
  16. android:id="@+id/btn1"
  17. android:layout_width="wrap_content"
  18. android:layout_height="wrap_content"
  19. android:layout_weight="1"
  20. android:text="1" />
  21. android:id="@+id/btn2"
  22. android:layout_width="wrap_content"
  23. android:layout_height="wrap_content"
  24. android:layout_weight="1"
  25. android:text="2" />
  26. android:id="@+id/btn3"
  27. android:layout_width="wrap_content"
  28. android:layout_height="wrap_content"
  29. android:layout_weight="1"
  30. android:text="3" />
  31. android:id="@+id/btnAdd"
  32. android:layout_width="wrap_content"
  33. android:layout_height="wrap_content"
  34. android:layout_weight="1"
  35. android:text="+" />
  36. android:layout_width="fill_parent"
  37. android:layout_height="wrap_content" >
  38. android:id="@+id/btn4"
  39. android:layout_width="wrap_content"
  40. android:layout_height="wrap_content"
  41. android:layout_weight="1"
  42. android:text="4" />
  43. android:id="@+id/btn5"
  44. android:layout_width="wrap_content"
  45. android:layout_height="wrap_content"
  46. android:layout_weight="1"
  47. android:text="5" />
  48. android:id="@+id/btn6"
  49. android:layout_width="wrap_content"
  50. android:layout_height="wrap_content"
  51. android:layout_weight="1"
  52. android:text="6" />
  53. android:id="@+id/btnSub"
  54. android:layout_width="wrap_content"
  55. android:layout_height="wrap_content"
  56. android:layout_weight="1"
  57. android:text="-" />
  58. android:layout_width="fill_parent"
  59. android:layout_height="wrap_content" >
  60. android:id="@+id/btn7"
  61. android:layout_width="wrap_content"
  62. android:layout_height="wrap_content"
  63. android:layout_weight="1"
  64. android:text="7" />
  65. android:id="@+id/btn8"
  66. android:layout_width="wrap_content"
  67. android:layout_height="wrap_content"
  68. android:layout_weight="1"
  69. android:text="8" />
  70. android:id="@+id/btn9"
  71. android:layout_width="wrap_content"
  72. android:layout_height="wrap_content"
  73. android:layout_weight="1"
  74. android:text="9" />
  75. android:id="@+id/btnX"
  76. android:layout_width="wrap_content"
  77. android:layout_height="wrap_content"
  78. android:layout_weight="1"
  79. android:text="*" />
  80. android:layout_width="fill_parent"
  81. android:layout_height="wrap_content" >
  82. android:id="@+id/btnClear"
  83. android:layout_width="wrap_content"
  84. android:layout_height="wrap_content"
  85. android:layout_weight="1"
  86. android:text="C" />
  87. android:id="@+id/btn0"
  88. android:layout_width="wrap_content"
  89. android:layout_height="wrap_content"
  90. android:layout_weight="1"
  91. android:text="0" />
  92. android:id="@+id/btnResult"
  93. android:layout_width="wrap_content"
  94. android:layout_height="wrap_content"
  95. android:layout_weight="1"
  96. android:text="=" />
  97. android:id="@+id/btnDiv"
  98. android:layout_width="wrap_content"
  99. android:layout_height="wrap_content"
  100. android:layout_weight="1"
  101. android:text="/" />

来自为知笔记(Wiz)

时间: 2024-10-26 00:23:35

Android -计算器的实现的相关文章

Android计算器界面布局

Android计算器界面图: 所定义的XML布局文件,主要用到的是TableLayout: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_heigh

[ 转自 果壳 原著matrix67 ]Android计算器低级错误?都是二进制惹的祸!

Android 计算器惊现超级大 bug!在 Android 的计算器程序里输入 14.52 - 14.49,计算器竟然说它等于 0.0299999999!其实,这已经是计算机的老毛病了.计算机用二进制来表示数,将会不可避免地产生误差. 听说了 Android 的超级大 bug,我立即在自己的 HTC Hero 上试了一下,果然正如众人所说, 14.52 - 14.49 = 0.0299999999.稍作试验便可发现,一些更为简单的算式也会出现类似的问题,例如在 Android 计算器中输入 1

Android计算器APP练习(1)--- 界面

Android Studio 2.3.2 .参考文章:http://blog.csdn.net/like_program/article/details/51813632 1. 新建工程 MyCalculator,一路下一步,均采用默认值. 2. 按照要求修改三个xml文件内容.很多地方工程名字不一样,改成自己的名字. 3. 按照步骤修改Activity_main.XML文件,遇到问题: android:singleLine="false" 过时 暂时处理方式:删掉此行. 4. 按照步

Android计算器界面

1 <?xml version="1.0" encoding="utf-8"?> 2 <TableLayout xmlns:android="http://schemas.android.com/apk/res/android" 3 android:layout_width="match_parent" 4 android:layout_height="match_parent" 5 an

Android 计算器

首先在activity_main.xml加入一个EditText 通过xml的方式来沈成一个图像在drawable中新建一个white_bg.xml文件,同时选择一个shape标签corners设置圆角 <corners android:radius="5dp"/> gradient设置颜色渐变 <gradient android:startColor="#FFFFFF" android:endColor="#00FFFF" /

Android 计算器制作 2.注册View 构建函数

鄙人新手 整了 快两天 终于搞定了.. 1.首先是MainActivity 中 在Oncreate函数中 注册 2.按+ 或者 - 号 来分成两大字符串 s1 和 s2 再将s2 分为更小的s1 和 s2 直到 s2不包含+ 或者 -号 思路就是这样,没用递归,递归速度太慢,也不擅长用递归. 3.就是找各种Bug 还有装饰 基本达成目标 和自己手机上安卓的自带计算器基本一样. 项目代码如下: 链接: 链接: http://pan.baidu.com/s/1sj65nop 密码: 926r 看到还

android计算器

一:引言    目前手机可以说是普及率非常高的电子设备了,由于其便于携带,使用方便,资费适中等等原因,现在手机已经在一定程度开始代替固定电话的通话功能,以及一些原来电脑软件上的功能了.手机上的软件也随着手机的发展变得丰富起来了,时至今日已经出现了很多专门制作手机软件的公司,虽然制作的多是游戏软件,但是一些辅助性的工具软件也有了很多.我们在此次系统中所做的工作主要是设计整个系统以及利用编程语言实现整个系统,使系统能够正确的运行计算功能.二:需求分析 状态定义:能满足基本的数学运算.具体要求如下: 

结对实验报告-android计算器设计

 一:引言  目前手机可以说是普及率非常高的电子设备了,由于其便于携带,使用方便,资费适中等等原因,现在手机已经在一定程度开始代替固定电话的通话功能,以及一些原来电脑软件上的功能了.手机上的软件也随着手机的发展变得丰富起来了,时至今日已经出现了很多专门制作手机软件的公司,虽然制作的多是游戏软件,但是一些辅助性的工具软件也有了很多.我们在此次系统中所做的工作主要是设计整个系统以及利用编程语言实现整个系统,使系统能够正确的运行计算功能. 二:需求分析 状态定义:能满足基本的数学运算.具体要求如下:

最容易理解的Android计算器实现

package com.example.Calcuator; import com.wk.cal.CalAdd; import com.wk.cal.CalDiv; import com.wk.cal.CalMul; import com.wk.cal.CalSub; import com.wk.cal.Calculator; import android.app.Activity; import android.os.Bundle; import android.view.View; impo