当前位置:   article > 正文

用Android Studio编写简单的计算器,并实现具体功能_androi studio计算器的设计与实现(参考手机计算器) (1)能完成两项的四则运算 (2)

androi studio计算器的设计与实现(参考手机计算器) (1)能完成两项的四则运算 (2)

实现简单的计算器功能

程序步骤:

(1)在布局文件定义一些计算器界面的文本框,按钮等组件。

(2)在Activity中获取组件实例。

(3)通过swtich函数,判断输入的内容,并进行相应操作,通过getText()获取文本内容,setText()显示。

程序代码设计:

一、界面布局

       参考书本例2-9,应用网格布局设计计算器界面,在设计区域设置一个6行4列的网格布局,第一行为显示数据的文本标签,第二行为清除数据的按钮,即清空所有输入的数据,3-6行划分为均等的16个按钮,分别代表数字0-9,小数点,和运算符加减乘除以及等于号。界面效果图如下

       布局文件activity_main.xml:

       定义一些计算器界面的文本框,按钮等组件,因为要与控制文件MainActivity.java建立关联,所以每一个组件都需要设置id属性值。要注意的是,打开布局文件时,我一开始参照书本,把原来自动给出的抬头改了,导致界面只能出现文本标签和清除按钮,经过修改,我发现不能修改原来的抬头,直接在下面再设置网格布局。

  1. <!-- 设置一个网格布局,网格为64列-->
  2. <GridLayout
  3. android:layout_width="fill_parent"
  4. android:layout_height="fill_parent"
  5. android:columnCount="4" //设置网格列数
  6. android:rowCount="6" //设置网格行数
  7. tools:layout_editor_absoluteX="73dp"
  8. tools:layout_editor_absoluteY="294dp">
  9. <!--第一行-->
  10. <TextView
  11. android:id="@+id/textView" //设置id属性值
  12. android:layout_width="wrap_content"
  13. android:layout_height="wrap_content"
  14. android:layout_columnSpan="4" //该组件占据4列的位置
  15. android:textSize="26sp" />
  16. <!--第二行-->
  17. <Button
  18. android:id="@+id/butCancel"
  19. android:layout_width="match_parent"
  20. android:layout_height="wrap_content"
  21. android:layout_columnSpan="4"
  22. android:text="清除"
  23. android:textSize="26sp" />
  24. <Button
  25. android:id="@+id/but_1"
  26. android:text="1"
  27. android:textSize="26sp" />
  28. <Button
  29. android:id="@+id/but_2"
  30. android:text="2"
  31. android:textSize="26sp" />
  32. <Button
  33. android:id="@+id/but_3"
  34. android:text="3"
  35. android:textSize="26sp" />
  36. <Button
  37. android:id="@+id/but_add"
  38. android:text="+"
  39. android:textSize="26sp" />
  40. <Button
  41. android:id="@+id/but_4"
  42. android:text="4"
  43. android:textSize="26sp" />
  44. <Button
  45. android:id="@+id/but_5"
  46. android:text="5"
  47. android:textSize="26sp" />
  48. <Button
  49. android:id="@+id/but_6"
  50. android:text="6"
  51. android:textSize="26sp" />
  52. <Button
  53. android:id="@+id/but_sub"
  54. android:text="-"
  55. android:textSize="26sp" />
  56. <Button
  57. android:id="@+id/but_7"
  58. android:text="7"
  59. android:textSize="26sp" />
  60. <Button
  61. android:id="@+id/but_8"
  62. android:text="8"
  63. android:textSize="26sp" />
  64. <Button
  65. android:id="@+id/but_9"
  66. android:text="9"
  67. android:textSize="26sp" />
  68. <Button
  69. android:id="@+id/but_mut"
  70. android:text="*"
  71. android:textSize="26sp" />
  72. <Button
  73. android:id="@+id/but_dopt"
  74. android:text="."
  75. android:textSize="26sp" />
  76. <Button
  77. android:id="@+id/but_0"
  78. android:text="0"
  79. android:textSize="26sp" />
  80. <Button
  81. android:id="@+id/but_equ"
  82. android:text="="
  83. android:textSize="26sp" />
  84. <Button
  85. android:id="@+id/but_div"
  86. android:text="/"
  87. android:textSize="26sp" />
  88. </GridLayout>

二、设计控制文件MainActivity:

      建立与程序中组件与用户界面程序组件的关联,并编写设计按钮的监听事件处理代码。点击数字和小数点按钮在文本标签输入并显示要计算的数字,点击运算符按钮获取前面的数字,放进num1,按=运算符时,获取前面的数字,再通过op判断操作数,进行加减乘除运算,输出结果。

      关联用户界面:

  1. public class MainActivity extends AppCompatActivity {
  2. private TextView txt; /*显示计算过程及结果*/
  3. private Button butp,but1,but2,but3,but4,but5,but6,but7,but8,but9,but0,buta,buts,butm,butdiv,butdopt,buteq;
  4. double num1=0,num2=0;
  5. double result=0; /*计算结果*/
  6. int op=0; /*判断操作数*/
  7. @Override
  8. protected void onCreate(Bundle savedInstanceState) {
  9. super.onCreate(savedInstanceState);
  10. setContentView(R.layout.activity_main);
  11. txt=(TextView) findViewById(R.id.textView); /*与用户界面程序中组件建立关联*/
  12. butp=(Button)findViewById(R.id.butCancel); /*清除*/
  13. but1=(Button)findViewById(R.id.but_1);
  14. but2=(Button)findViewById(R.id.but_2);
  15. but3=(Button)findViewById(R.id.but_3);
  16. but4=(Button)findViewById(R.id.but_4);
  17. but5=(Button)findViewById(R.id.but_5);
  18. but6=(Button)findViewById(R.id.but_6);
  19. but7=(Button)findViewById(R.id.but_7);
  20. but8=(Button)findViewById(R.id.but_8);
  21. but9=(Button)findViewById(R.id.but_9);
  22. but0=(Button)findViewById(R.id.but_0);
  23. buta=(Button)findViewById(R.id.but_add); /**/
  24. buts=(Button)findViewById(R.id.but_sub); /**/
  25. butm=(Button)findViewById(R.id.but_mut); /**/
  26. butdiv=(Button)findViewById(R.id.but_div); /**/
  27. butdopt=(Button)findViewById(R.id.but_dopt); /**/
  28. buteq=(Button)findViewById(R.id.but_equ); /*等于*/
  29. butp.setOnClickListener(new mClick());
  30. but1.setOnClickListener(new mClick());
  31. but2.setOnClickListener(new mClick());
  32. but3.setOnClickListener(new mClick());
  33. but4.setOnClickListener(new mClick());
  34. but5.setOnClickListener(new mClick());
  35. but6.setOnClickListener(new mClick());
  36. but7.setOnClickListener(new mClick());
  37. but8.setOnClickListener(new mClick());
  38. but9.setOnClickListener(new mClick());
  39. but0.setOnClickListener(new mClick());
  40. buta.setOnClickListener(new mClick());
  41. buts.setOnClickListener(new mClick());
  42. butm.setOnClickListener(new mClick());
  43. butdiv.setOnClickListener(new mClick());
  44. butdopt.setOnClickListener(new mClick());
  45. buteq.setOnClickListener(new mClick());
  46. }

实现监听时间处理:

      数字,小数点按键:

  1. class mClick implements View.OnClickListener
  2. {
  3. public void onClick(View v) {
  4. switch(v.getId()){ /*用swtich()方法,判断点击按钮的id*/
  5. case R.id.butCancel: /*清除,直接将输入的所有符号清空*/
  6. txt.setText(null);
  7. break;
  8. /*数字,小数点按键*/
  9. case R.id.but_1:
  10. String str1=txt.getText().toString(); /*获取输入内容并转为string类型/
  11. str1+="1"; /*拼接字符串*/
  12. txt.setText(str1); /*显示输入内容*/
  13. break;
  14. case R.id.but_2:
  15. String str2=txt.getText().toString();
  16. str2+="2";
  17. txt.setText(str2);
  18. break;
  19. case R.id.but_3:
  20. String str3=txt.getText().toString();
  21. str3+="3";
  22. txt.setText(str3);
  23. break;
  24. case R.id.but_4:
  25. String str4=txt.getText().toString();
  26. str4+="4";
  27. txt.setText(str4);
  28. break;
  29. case R.id.but_5:
  30. String str5=txt.getText().toString();
  31. str5+="5";
  32. txt.setText(str5);
  33. break;
  34. case R.id.but_6:
  35. String str6=txt.getText().toString();
  36. str6+="6";
  37. txt.setText(str6);
  38. break;
  39. case R.id.but_7:
  40. String str7=txt.getText().toString();
  41. str7+="7";
  42. txt.setText(str7);
  43. break;
  44. case R.id.but_8:
  45. String str8=txt.getText().toString();
  46. str8+="8";
  47. txt.setText(str8);
  48. break;
  49. case R.id.but_9:
  50. String str9=txt.getText().toString();
  51. str9+="9";
  52. txt.setText(str9);
  53. break;
  54. case R.id.but_0:
  55. String strr=txt.getText().toString();
  56. strr+="0";
  57. txt.setText(strr);
  58. break;
  59. case R.id.but_dopt:
  60. String strd=txt.getText().toString();
  61. strd+=".";
  62. txt.setText(strd);
  63. break;

     运算符按键:

  1. /*运算符按键*/
  2. case R.id.but_add:
  3. String stradd=txt.getText().toString();/*按运算符,获取要计算的数字,并放入num1等待计算*/
  4. if(stradd.equals(null)) /*判断按运算符前是否输入要计算的数字,若为空,则返回*/
  5. {
  6. return;
  7. }
  8. num1=Double.valueOf(stradd);/*将获取的字符串转化为double类型以便计算*/
  9. txt.setText(null);
  10. op=1;
  11. break;
  12. case R.id.but_sub:
  13. String strsub=txt.getText().toString();
  14. if(strsub.equals(null))
  15. {
  16. return;
  17. }
  18. num1=Double.valueOf(strsub);
  19. txt.setText(null);
  20. op=2;
  21. break;
  22. case R.id.but_mut:
  23. String strmut=txt.getText().toString();
  24. if(strmut.equals(null))
  25. {
  26. return;
  27. }
  28. num1=Double.valueOf(strmut);
  29. txt.setText(null);
  30. op=3;
  31. break;
  32. case R.id.but_div:
  33. String strdiv=txt.getText().toString();
  34. if(strdiv.equals(null))
  35. {
  36. return;
  37. }
  38. num1=Double.valueOf(strdiv);
  39. txt.setText(null);
  40. op=4;
  41. break;

      逻辑算法实现:虽然能进行简单的计算,但是因为把输入的数字放入num1和num2,进行计算,点击运算符只是获取符号前的数字,并不是显示运算符,所以我只是手动添加等式显示,即结果显示时只能显示两个数之间的加减乘除运算。

  1. case R.id.but_equ:
  2. String strequ=txt.getText().toString();
  3. num2=Double.valueOf(strequ);
  4. txt.setText(null);
  5. switch (op){ /*用switch函数来判断进行何种操作,实施运算并得出结果*/
  6. case 1:
  7. result=num1+num2;
  8. txt.setText(String.valueOf(num1)+"+"+String.valueOf(num2)+"="+String.valueOf(result));/*获取结果并将其转为字符串输出*/
  9. break;
  10. case 2:
  11. result=num1-num2;
  12. txt.setText(String.valueOf(num1)+"-"+String.valueOf(num2)+"="+String.valueOf(result));
  13. break;
  14. case 3:
  15. result=num1*num2;
  16. txt.setText(String.valueOf(num1)+"*"+String.valueOf(num2)+"="+String.valueOf(result));
  17. break;
  18. case 4:
  19. if (num2==0){
  20. txt. setText("除数不能为0!"); /*规定除数不能为0,否则报错*/
  21. }else{
  22. result=num1/num2;
  23. txt.setText(String.valueOf(num1)+"/"+String.valueOf(num2)+"="+String.valueOf(result));}
  24. break;
  25. default:
  26. result=0;
  27. break;
  28. }

三、运行结果

     在编写这个计算器代码的过程中,收获了很多,对Android Studio的布局有了更多的认识,对它的操作也熟练了很多,也学会了怎样可以更快速,便捷地进行代码编写,在实践中学习,即使这次的代码还有很多要改进,修改的地方。

 

 

 

 

   

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/223241
推荐阅读
相关标签
  

闽ICP备14008679号