初学android,仅能实现一些较为简单的功能,下面代码能实现加减乘除和清除功能,但是不能实现多位数的计算。

界面布置activity_main.xml:

Android 简单计算器实现_第1张图片

 

<?xml version="1.0" encoding="utf-8"?>//网格布局,设置为6行4列                

 功能实现activity_main.java,主要实现按钮的监控功能和基本算法

package com.example.counter;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.Button;import android.widget.EditText;public class MainActivity extends AppCompatActivity {    private EditText txt1;    private Button del, bu11, bu12, bu13, bu14, bu21, bu22, bu23, bu24, bu31, bu32, bu33, bu34, bu41, bu42, bu43, bu44;    boolean clr_flag;//判断文本框是否清空    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);//显示activity_main.xml定义的用户界面        txt1 = (EditText) findViewById(R.id.text1);        del = (Button) findViewById(R.id.delete);        bu11 = (Button) findViewById(R.id.but11);        bu12 = (Button) findViewById(R.id.but12);        bu13 = (Button) findViewById(R.id.but13);        bu14 = (Button) findViewById(R.id.but14);        bu21 = (Button) findViewById(R.id.but21);        bu22 = (Button) findViewById(R.id.but22);        bu23 = (Button) findViewById(R.id.but23);        bu24 = (Button) findViewById(R.id.but24);        bu31 = (Button) findViewById(R.id.but31);        bu32 = (Button) findViewById(R.id.but32);        bu33 = (Button) findViewById(R.id.but33);        bu34 = (Button) findViewById(R.id.but34);        bu41 = (Button) findViewById(R.id.but41);        bu42 = (Button) findViewById(R.id.but42);        bu43 = (Button) findViewById(R.id.but43);        bu44 = (Button) findViewById(R.id.but44);//与用户界面程序中的组件建立关联        del.setOnClickListener(new click());        bu11.setOnClickListener(new click());        bu12.setOnClickListener(new click());        bu13.setOnClickListener(new click());        bu14.setOnClickListener(new click());        bu21.setOnClickListener(new click());        bu22.setOnClickListener(new click());        bu23.setOnClickListener(new click());        bu24.setOnClickListener(new click());        bu31.setOnClickListener(new click());        bu32.setOnClickListener(new click());        bu33.setOnClickListener(new click());        bu34.setOnClickListener(new click());        bu41.setOnClickListener(new click());        bu42.setOnClickListener(new click());        bu43.setOnClickListener(new click());        bu44.setOnClickListener(new click());//注册监听接口    }    class click implements View.OnClickListener{        public void onClick(View v) {            String str = txt1.getText().toString();            switch (v.getId()) {                case R.id.but11:                case R.id.but12:                case R.id.but13:                case R.id.but21:                case R.id.but22:                case R.id.but23:                case R.id.but31:                case R.id.but32:                case R.id.but33:                case R.id.but42:                    if (clr_flag) {                        clr_flag = false;                        str = "";                        txt1.setText("");                    }                    txt1.setText(str + ((Button) v).getText());                    break;                case R.id.but14:                case R.id.but24:                case R.id.but34:                case R.id.but44:                    if (clr_flag) {                        clr_flag = false;                        str = "";                        txt1.setText("");                    }                    if (str.contains("+") || str.contains("-") || str.contains("*") || str.contains("/")) {                        str = str.substring(0, str.indexOf(" "));//如果文本框中包含算法符号,则将其删除                    }                    txt1.setText(str + " " + ((Button) v).getText() + " ");                    break;                case R.id.delete:                    if (clr_flag) {                        clr_flag = false;                        str = "";                        txt1.setText("");                    } else if (str != null && !str.equals("")) {                        txt1.setText(str.substring(0, str.length() - 1));//如果字符串不为空并且不包含空格,则删去文本框的最后一个字符                    }                    break;                case R.id.but43:                    getResult();                    break;            }            }            private void getResult()//等式算法            {            String exp=txt1.getText().toString();            if(exp==null||exp.equals(""))//文本框没有数字                return;            if(!exp.contains("")){//文本框只有数字                return;            }                if (clr_flag) {                    clr_flag = false;                    return;                }                clr_flag=true;                String s1=exp.substring(0,exp.indexOf(" "));//得到第一个数字                String op=exp.substring(exp.indexOf(" ")+1,exp.indexOf(" ")+2);//得到算法符号                String s2=exp.substring(exp.indexOf(" ")+3);//得到第二个数字                double cnt=0;                if(!s1.equals("")&&!s2.equals("")) {//正常情况计算                    double d1 = Double.parseDouble(s1);                    double d2 = Double.parseDouble(s2);                    if (op.equals("+")) {                        cnt = d1 + d2;                    }                    if (op.equals("-")) {                        cnt = d1 - d2;                    }                    if (op.equals("*")) {                        cnt = d1 * d2;                    }                    if (op.equals("/")) {                        if (d2 == 0) cnt = 0;                        else cnt = d1 / d2;                    }                    if (!s1.contains(".") && !s2.contains(".") && !op.equals("/")) {                        int res = (int) cnt;                        txt1.setText(res + "");//没有小数点,输出整数                    } else {                        txt1.setText(cnt + "");//有小数点,输出double型                    }                }                    else if(s1.equals("")&&!s2.equals(".")) {//第一个数值为空,第二个数值为整数                    double d2 = Double.parseDouble(s2);                    if (op.equals("+")) {                        cnt = d2;                    }                    if (op.equals("-")) {                        cnt = 0 - d2;                    }                    if (op.equals("*")) {                        cnt = 0;                    }                    if (op.equals("/")) {                        cnt = 0;                    }                    if (!s2.contains(".")) {                        int res = (int) cnt;                        txt1.setText(res + " ");                    } else {                        txt1.setText(cnt + " ");                    }                }                else {                    txt1.setText("");//仅有算法符号,输出为空                }        }    }}

android studio 编写容易产生闪退,可以新建项目,查看会不会闪退,如果app没问题,就是代码编写错误了,这个时候可以试着注释掉一些代码,找出有问题的代码修改。

更多相关文章

  1. android小功能实现之发送短信
  2. android中调用系统功能 来显示本地相册图片 拍照 视频 音频功能
  3. 【知识点】android代码中设置margin
  4. 实现调用Android手机的拍照功能
  5. Android蓝牙通信代码
  6. Android代码规范
  7. android典型代码系列(二十二)------按键使上面的EditText抖动
  8. 用代码创建Android视图
  9. Android中对Group的各种操作示例代码

随机推荐

  1. 如何向android的framework里添加新类
  2. Android(安卓)对话框【Dialog】去除白色
  3. Android并行计算
  4. android自动化测试工具
  5. Android(安卓)application 和 activity
  6. android 下载进度条的实现
  7. Android(安卓)- Rerofit-RxJava(转载)
  8. Android(安卓)上传图片到服务器(多文件上
  9. Android中彩信文件的读取
  10. android 权限介绍(一)