Android实训案例(一)——计算器的运算逻辑
16lz
2021-01-23
Android实训案例(一)——计算器的运算逻辑
应一个朋友的邀请,叫我写一个计算器,开始觉得,就一个计算器嘛,很简单的,但是写着写着发现自己写出来的逻辑真不严谨,于是搜索了一下,看到mk(没有打广告….)上有视频,于是看了下他的逻辑,以前还真是小瞧计算器了,计算器要是高级一点的处理起来更加繁琐,这里就做了一个简单一点的,这次用的是Android Studio 开发的,毕竟自己也是一直很推崇AS,但是在之前的博客里都只是为了方便,一直在用Eclipse
一直强烈推荐大家还是转移到AS上去,虽然我工作一直在用Eclipse,不过AS的脚步一直没有落下,好处多多!
运行截图:
这个仍然还是有许多不完善的地方,如果看官觉得可以改的话,欢迎参与
activity_main.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_gravity="center" android:background="@drawable/main_bg" android:orientation="vertical" android:paddingBottom="@dimen/activity_vertical_margin" android:paddingLeft="@dimen/activity_horizontal_margin" android:paddingRight="@dimen/activity_horizontal_margin" android:paddingTop="@dimen/activity_vertical_margin" tools:context=".MainActivity"> <RelativeLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center"> <EditText android:id="@+id/et_showview" android:layout_width="350dip" android:layout_height="100dip" android:background="@drawable/whitebg" android:editable="false" android:gravity="bottom|right" android:textSize="20sp" /> </RelativeLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="fill_parent" android:layout_marginTop="20dip" android:gravity="center_horizontal" android:orientation="vertical"> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:gravity="center_horizontal" android:orientation="horizontal"> <Button android:id="@+id/btn_clear" android:layout_width="80dp" android:layout_height="80dp" android:background="@drawable/white_btn_selector" android:gravity="bottom|right" android:paddingBottom="10dp" android:paddingRight="10dp" android:text="C" android:textSize="20sp" /> <Button android:id="@+id/btn_del" android:layout_width="80dp" android:layout_height="80dp" android:layout_marginLeft="10dip" android:background="@drawable/white_btn_selector" android:gravity="bottom|right" android:paddingBottom="10dp" android:paddingRight="10dp" android:text="DEL" android:textSize="20sp" /> <Button android:id="@+id/btn_divide" android:layout_width="80dp" android:layout_height="80dp" android:layout_marginLeft="10dip" android:background="@drawable/white_btn_selector" android:gravity="bottom|right" android:paddingBottom="10dp" android:paddingRight="10dp" android:text="÷" android:textSize="20sp" /> <Button android:id="@+id/btn_multiply" android:layout_width="80dp" android:layout_height="80dp" android:layout_marginLeft="10dip" android:background="@drawable/white_btn_selector" android:gravity="bottom|right" android:paddingBottom="10dp" android:paddingRight="10dp" android:text="×" android:textSize="20sp" /> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="10dip" android:gravity="center_horizontal" android:orientation="horizontal"> <Button android:id="@+id/btn_7" android:layout_width="80dp" android:layout_height="80dp" android:background="@drawable/white_btn_selector" android:gravity="bottom|right" android:paddingBottom="10dp" android:paddingRight="10dp" android:text="7" android:textSize="20sp" /> <Button android:id="@+id/btn_8" android:layout_width="80dp" android:layout_height="80dp" android:layout_marginLeft="10dip" android:background="@drawable/white_btn_selector" android:gravity="bottom|right" android:paddingBottom="10dp" android:paddingRight="10dp" android:text="8" android:textSize="20sp" /> <Button android:id="@+id/btn_9" android:layout_width="80dp" android:layout_height="80dp" android:layout_marginLeft="10dip" android:background="@drawable/white_btn_selector" android:gravity="bottom|right" android:paddingBottom="10dp" android:paddingRight="10dp" android:text="9" android:textSize="20sp" /> <Button android:id="@+id/btn_minus" android:layout_width="80dp" android:layout_height="80dp" android:layout_marginLeft="10dip" android:background="@drawable/white_btn_selector" android:gravity="bottom|right" android:paddingBottom="10dp" android:paddingRight="10dp" android:text="-" android:textSize="20sp" /> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="10dip" android:gravity="center_horizontal" android:orientation="horizontal"> <Button android:id="@+id/btn_4" android:layout_width="80dp" android:layout_height="80dp" android:background="@drawable/white_btn_selector" android:gravity="bottom|right" android:paddingBottom="10dp" android:paddingRight="10dp" android:text="4" android:textSize="20sp" /> <Button android:id="@+id/btn_5" android:layout_width="80dp" android:layout_height="80dp" android:layout_marginLeft="10dip" android:background="@drawable/white_btn_selector" android:gravity="bottom|right" android:paddingBottom="10dp" android:paddingRight="10dp" android:text="5" android:textSize="20sp" /> <Button android:id="@+id/btn_6" android:layout_width="80dp" android:layout_height="80dp" android:layout_marginLeft="10dip" android:background="@drawable/white_btn_selector" android:gravity="bottom|right" android:paddingBottom="10dp" android:paddingRight="10dp" android:text="6" android:textSize="20sp" /> <Button android:id="@+id/btn_pluse" android:layout_width="80dp" android:layout_height="80dp" android:layout_marginLeft="10dip" android:background="@drawable/white_btn_selector" android:gravity="bottom|right" android:paddingBottom="10dp" android:paddingRight="10dp" android:text="+" android:textSize="20sp" /> </LinearLayout> <LinearLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_marginTop="10dip" android:gravity="center_horizontal" android:orientation="horizontal"> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="vertical"> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:orientation="horizontal"> <Button android:id="@+id/btn_1" android:layout_width="80dp" android:layout_height="80dp" android:background="@drawable/white_btn_selector" android:gravity="bottom|right" android:paddingBottom="10dp" android:paddingRight="10dp" android:text="1" android:textSize="20sp" /> <Button android:id="@+id/btn_2" android:layout_width="80dp" android:layout_height="80dp" android:layout_marginLeft="10dip" android:background="@drawable/white_btn_selector" android:gravity="bottom|right" android:paddingBottom="10dp" android:paddingRight="10dp" android:text="2" android:textSize="20sp" /> <Button android:id="@+id/btn_3" android:layout_width="80dp" android:layout_height="80dp" android:layout_marginLeft="10dip" android:background="@drawable/white_btn_selector" android:gravity="bottom|right" android:paddingBottom="10dp" android:paddingRight="10dp" android:text="3" android:textSize="20sp" /> </LinearLayout> <LinearLayout android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="10dip" android:orientation="horizontal"> <Button android:id="@+id/btn_0" android:layout_width="170dp" android:layout_height="80dp" android:background="@drawable/white_btn_selector" android:gravity="bottom|right" android:paddingBottom="10dp" android:paddingRight="10dp" android:text="0" android:textSize="20sp" /> <Button android:id="@+id/btn_point" android:layout_width="80dp" android:layout_height="80dp" android:layout_marginLeft="10dip" android:background="@drawable/white_btn_selector" android:gravity="bottom|right" android:paddingBottom="10dp" android:paddingRight="10dp" android:text="." android:textSize="20sp" /> </LinearLayout> </LinearLayout> <Button android:id="@+id/btn_equal" android:layout_width="80dp" android:layout_height="170dip" android:layout_marginLeft="10dip" android:background="@drawable/orange_btn_selector" android:gravity="bottom|right" android:paddingBottom="10dp" android:paddingRight="10dp" android:text="=" android:textSize="20sp" /> </LinearLayout> <TextView android:gravity="center" android:autoLink="web" android:layout_width="350dp" android:layout_height="0dp" android:layout_marginTop="20dp" android:layout_weight="1" android:text="微博:http://weibo.com/Glorystys 博客:http://blog.csdn.net/qq_26787115" android:textColor="@android:color/white" android:textSize="20sp" /> </LinearLayout></LinearLayout>
MainActivity
package com.lgl.calculator;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.Button;import android.widget.EditText;/** * 计算器 */public class MainActivity extends AppCompatActivity implements View.OnClickListener { private Button btn_0; private Button btn_1; private Button btn_2; private Button btn_3; private Button btn_4; private Button btn_5; private Button btn_6; private Button btn_7; private Button btn_8; private Button btn_9; private Button btn_point;// 小数点 private Button btn_divide;// 除以 private Button btn_multiply;// 乘以 private Button btn_minus;// 减去 private Button btn_pluse;// 加 private Button btn_equal;// 等于 private Button btn_clear; //清空 private Button btn_del; //取消 private EditText et_showview; //输入框 private double dou = 0; //接收结果 /** * 加一个标识 * 需求就是我们运算出结果的时候,再次点击数字及你选哪个下一次运算,这个时候,输入框应该自动为空 */ private boolean flag; //清空标识 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); initView(); } private void initView() { btn_0 = (Button) findViewById(R.id.btn_0); btn_1 = (Button) findViewById(R.id.btn_1); btn_2 = (Button) findViewById(R.id.btn_2); btn_3 = (Button) findViewById(R.id.btn_3); btn_4 = (Button) findViewById(R.id.btn_4); btn_5 = (Button) findViewById(R.id.btn_5); btn_6 = (Button) findViewById(R.id.btn_6); btn_7 = (Button) findViewById(R.id.btn_7); btn_8 = (Button) findViewById(R.id.btn_8); btn_9 = (Button) findViewById(R.id.btn_9); btn_point = (Button) findViewById(R.id.btn_point);// 小数点 btn_divide = (Button) findViewById(R.id.btn_divide);// 除以 btn_multiply = (Button) findViewById(R.id.btn_multiply);// 乘以 btn_minus = (Button) findViewById(R.id.btn_minus);// 减去 btn_pluse = (Button) findViewById(R.id.btn_pluse);// 加 btn_equal = (Button) findViewById(R.id.btn_equal);// 等于 btn_clear = (Button) findViewById(R.id.btn_clear); btn_del = (Button) findViewById(R.id.btn_del); et_showview = (EditText) findViewById(R.id.et_showview); btn_0.setOnClickListener(this); btn_1.setOnClickListener(this); btn_2.setOnClickListener(this); btn_3.setOnClickListener(this); btn_4.setOnClickListener(this); btn_5.setOnClickListener(this); btn_6.setOnClickListener(this); btn_7.setOnClickListener(this); btn_8.setOnClickListener(this); btn_9.setOnClickListener(this); btn_point.setOnClickListener(this); btn_divide.setOnClickListener(this); btn_multiply.setOnClickListener(this); btn_minus.setOnClickListener(this); btn_pluse.setOnClickListener(this); btn_equal.setOnClickListener(this); btn_clear.setOnClickListener(this); btn_del.setOnClickListener(this); } @Override public void onClick(View v) { //我们在这里实现业务逻辑 String str = et_showview.getText().toString(); switch (v.getId()) { //我们点击数字键,输入框就收到我们的计算数字 case R.id.btn_0: case R.id.btn_1: case R.id.btn_2: case R.id.btn_3: case R.id.btn_4: case R.id.btn_5: case R.id.btn_6: case R.id.btn_7: case R.id.btn_8: case R.id.btn_9: case R.id.btn_point: //再次输入的时候判断,把前面的清空,再把点击的按钮放在输入框上 if (flag) { flag = false; str = ""; et_showview.setText(""); } //我们只要点击键盘,相应的数字添加在EditText上 et_showview.setText(str + ((Button) v).getText()); break; //运算符也是一样需要添加的 case R.id.btn_pluse: case R.id.btn_minus: case R.id.btn_multiply: case R.id.btn_divide: //再次输入的时候判断,把前面的清空,再把点击的按钮放在输入框上 if (flag) { flag = false; str = ""; et_showview.setText(""); } //为了计算方便,我们可以在前后添加空格 et_showview.setText(str + " " + ((Button) v).getText() + " "); break; case R.id.btn_del: //再次输入的时候判断,把前面的清空,再把点击的按钮放在输入框上 if (flag) { flag = false; str = ""; et_showview.setText(""); } else if (str != null && !str.equals(" ")) {//判断,因为我们需要一个个删,首先确定是不是空或者"" //用substring()截取字符长度-1 再设置回去 形成删一个的效果 et_showview.setText(str.substring(0, str.length() - 1)); } break; //清除按钮,直接把输入框设置成空 case R.id.btn_clear: flag = false; str = ""; et_showview.setText(" "); break; //计算结果 case R.id.btn_equal: getResult(); break; } } //等号计算结果 private void getResult() { //首先取一下你输入完后现在输入框的内容 String result = et_showview.getText().toString(); //当我们的输入框是null或者""时我们不进行操作 if (result == null || result.equals(" ")) { return; } //我们要计算结果,必须知道输入框是否有操作符,判断条件就是前后是否在空格,否则不进行操作 if (!result.contains(" ")) { //没有运算符,所以不用运算 return; } //当我点击等号的时候,清空标识设置为true,但是如果之前有的话,设置成false if (flag) { flag = false; return; } flag = true; //如果有空格,我们就截取前后段再获取运算符进行计算 String str1 = result.substring(0, result.indexOf(" ")); //运算符前面字段 String op = result.substring(result.indexOf(" ") + 1, result.indexOf(" ") + 2); //截取运算符 String str2 = result.substring(result.indexOf(" ") + 3); //运算符后面字段 //这里我们还是要判断str1和str2都不是空才 if (!str1.equals("") && !str2.equals("")) { //第一种情况:都不是空 //强转 double d1 = Double.parseDouble(str1); double d2 = Double.parseDouble(str2); //开始计算,定义一个double变量接收结果,定义为全局 if (op.equals("+")) { //加 dou = d1 + d2; } else if (op.equals("-")) { //减 dou = d1 - d2; } else if (op.equals("×")) { //乘 dou = d1 * d2; } else if (op.equals("÷")) { //除 //除数为0不计算 if (d2 == 0) { dou = 0; } else { dou = d1 / d2; } } //我们之前把他强转为double类型了,但是如果没有小数点,我们就是int类型 if (!str1.contains(".") && !str2.contains(".") && !op.equals("÷")) { int i = (int) dou; et_showview.setText(i + ""); } else { //如果有小数点 et_showview.setText(dou + ""); } } else if (!str1.equals("") && str2.equals("")) { //第二种情况:str2是空 //这种情况就不运算了 et_showview.setText(result); } else if (str1.equals("") && !str2.equals("")) { //第三种情况:str1是空 //这种情况我们就需要判断了,因为此时str1 = 0; double d3 = Double.parseDouble(str2); if (op.equals("+")) { //加 dou = 0 + d3; } else if (op.equals("-")) { //减 dou = 0 - d3; } else if (op.equals("×")) { //乘 dou = 0; } else if (op.equals("÷")) { //除 //除数为0不计算 dou = 0; } //我们之前把他强转为double类型了,但是如果没有小数点,我们就是int类型 if (!str2.contains(".")) { int i = (int) dou; et_showview.setText(i + ""); } else { //如果有小数点 et_showview.setText(dou + ""); } } else { //最后一种情况,他们两个都是空 //我们清空掉 et_showview.setText(""); } }}
有兴趣的你也可以试试
Demo下载:http://download.csdn.net/detail/qq_26787115/9393665
更多相关文章
- Android实现购物车整体页面逻辑详解
- 语音计算器
- Android实现简单加法计算器
- android 除法运算保留小数点
- Android实现加法计算器
- android EditText输入金额,限制位数和显示小数点后几位