如何用Android开发实现简单的计算器功能
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇"如何用Android开发实现简单的计算器功能"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起
千家信息网最后更新 2026年11月03日如何用Android开发实现简单的计算器功能
这篇"如何用Android开发实现简单的计算器功能"文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇"如何用Android开发实现简单的计算器功能"文章吧。
计算器项目,要求实现加、减、乘、除、求倒数、求平方根等简单运算。
真机调试结果如下图:
布局文件:main_activity.xml
活动页面:MainActivity.java
package com.example.calculator;import androidx.appcompat.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.TextView;import android.widget.Toast;import com.example.calculator.cal.CoreAlgorithm;public class MainActivity extends AppCompatActivity implements View.OnClickListener{ private TextView tv_result; // 声明一个文本视图对象 private double result =0; // 当前的计算结果 private String showText = ""; // 显示的文本内容 private final StringBuilder builder=new StringBuilder(); //存储运算式子的字符串构造器 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv_result = findViewById(R.id.tv_result); int[] buttonSeq={ R.id.btn_cancel, // "取消"按钮 R.id.btn_divide,// "除法"按钮 R.id.btn_multiply , // "乘法"按钮 R.id.btn_clear , // "清除"按钮 R.id.btn_seven , // 数字7 R.id.btn_eight , // 数字8 R.id.btn_nine , // 数字9 R.id.btn_plus , // "加法"按钮 R.id.btn_four , // 数字4 R.id.btn_five , // 数字5 R.id.btn_six , // 数字6 R.id.btn_minus , // "减法"按钮 R.id.btn_one , // 数字1 R.id.btn_two , // 数字2 R.id.btn_three , // 数字3 R.id.btn_reciprocal , // 求倒数按钮 R.id.btn_zero , // 数字0 R.id.btn_dot , // "小数点"按钮 R.id.btn_equal , // "等号"按钮 R.id.ib_sqrt // "开平方"按钮 }; for(int buttonId:buttonSeq) findViewById(buttonId).setOnClickListener(this); builder.append(0); }//符号分类 //数字 //四则运算符 //小数点 //根号,倒数,等号,直接出结果 //CE C @Override public void onClick(View v) { int id=v.getId(); String inputText="";// if(result!=0){ //如果结果不为0,则按照结果进行运算// clear();// builder.append(result);// } //若不为根号,因为根号按钮无法取值 if(id!=R.id.ib_sqrt) { inputText = ((TextView) v).getText().toString(); //判断是否为数字、小数点以及四则运算符 if (inputText.matches("\\d|\\.")) { //输入是否为数字或点号 resultCheck(); if(builder.toString().equals("0")){ builder.deleteCharAt(builder.length()-1);} builder.append(inputText); if(verifyExp(builder.toString())){ refreshText(builder.toString()); //表达式正确刷新 }else{ builder.deleteCharAt(builder.length() - 1); //表达式不正确删除最后一位字符 } } else if (inputText.matches("\\+|-|×|÷")) { //输入为四则运算符 resultCheck(); builder.append(inputText); if(verifyExp(builder.toString())){ refreshText(builder.toString()); }else{ //更替运算符操作 builder.deleteCharAt(builder.length() - 1); builder.deleteCharAt(builder.length() - 1); builder.append(inputText); refreshText(builder.toString()); } } else { //点击了CE C 1/X = switch (inputText) { case "CE": resultCheck(); //有字符才能删除 if (builder.length() > 0) { builder.deleteCharAt(builder.length() - 1); refreshText(builder.toString()); } else { Toast.makeText(this, "没有数字可删了", Toast.LENGTH_SHORT).show(); } break; case "C": refreshText(""); result=0.0; builder.delete(0, builder.length()); //builder清空 builder.append(0); break; case "1/x": resultCheck(); result=1/(CoreAlgorithm.calExp(builder.toString())); refreshText("1/("+builder.toString()+")=\n"+result); break; case "=": resultCheck(); if(result==0.0) { result = CoreAlgorithm.calExp(builder.toString());// builder.append("=");//容易出错 ,按等号会把这个式子进行运算 refreshText(builder.toString() + "=\n" + result); } break; default: Toast.makeText(this, "error", Toast.LENGTH_SHORT).show(); } } }else{ // 点击了开根号,由于算法不支持有运算符在前,目前已经支持 resultCheck(); //经过一次检查结果被清零,结果存于builder中 result = Math.sqrt(CoreAlgorithm.calExp(builder.toString())); refreshText("√(" + builder.toString() + ")=\n" + result); } } //检查整个表达式 public boolean verifyExp(String exp){ //验证整个表达式是否合法 String lastNum=""; String[] sp=exp.split("\\+|-|×|÷"); //将操作数分割出来 char lastChar=exp.charAt(exp.length()-1); //获得最后一个字符 lastNum=sp[sp.length-1]; //取得最后一位操作数 if(String.valueOf(lastChar).matches("\\+|-|×|÷")) //如果当前符号为四则运算符 { lastNum=""; return exp.matches(".*(\\d[+-×÷])|.*(\\.[+-×÷])"); //验证最后的运算符是否符合只有一个原则 }else{ //最后一位为运算数 return lastNum.matches("^[-]?\\d*\\.?\\d*"); //验证最后一位运算数是否合法 } } // 刷新文本显示 private void refreshText(String text) { showText = text; tv_result.setText(showText); } // 清空并初始化 private void clear() { builder.delete(0, builder.length()); showText=""; } //基本每个出结果的按钮都要执行一次这个函数 public void resultCheck(){ //运算结果检查,有结果用结果,结果不为数字进行处理 if(result!=0){ //如果结果不为0,则按照结果进行运算 String res=String.valueOf(result); if(res.matches("^[-]?\\d*\\.?\\d*")){ //若为浮点数字 clear(); builder.append(result); result=0; //结果不清零,检查的时候就会一直重复放入结果 }else{ //若结果为字母,分母为0会返回Infinity,以及负数开方 clear(); builder.append("0"); result=0; } } if(builder.length()==0){ builder.append(0); } }}核心算法:CoreAlgorithm.java
package com.example.calculator.cal;import java.util.ArrayDeque;import java.util.Queue;import java.util.Stack;import java.util.regex.Matcher;import java.util.regex.Pattern;public class CoreAlgorithm { private static final Stack st = new Stack<>(); //原始数字栈 private static final Queue qu = new ArrayDeque<>(); //序列化数字队列, private static final Queue queOp = new ArrayDeque<>(); //符号队列 private static final Queue newQueOp = new ArrayDeque<>(); public static double calExp(String exp) {// String str="1+3*2-8/2+6";// String str="1+3*2/1"; //本算法似乎不支持符号在前面,目前算法已经改进 //处理运算符在式子最后 if (exp.matches(".*[\\+\\-×÷]")) { exp = exp.substring(0, exp.length() - 1); } String[] sp; //存放分割数组 //运算符在式子最前面 if (exp.matches("[\\+\\-×÷].*")) { String fistElem=exp.substring(0,1); //截取首个字符 exp=exp.substring(1); //舍去首个字符 //分割字符,提取数字 sp = exp.split("\\+|-|×|÷"); if(fistElem.equals("-")){ //首个字符为负号 sp[0]="-"+sp[0]; //添加负号 } }else{ //没有符号在前 sp = exp.split("\\+|-|×|÷"); } //之前直接分割字符会导致,数组第一位为空,导致程序无法运行 for (int i = sp.length - 1; i >= 0; i--) { if (sp[i].equals(".")) { st.push(0.0); //替换点号 } else { st.push(Double.parseDouble(sp[i])); } } //寻找匹配字符串 Pattern p = Pattern.compile("\\+|-|×|÷"); Matcher m = p.matcher(exp); while (m.find()) { queOp.add(m.group()); }// for(int i=sp.length-1;i>=0;i--){// System.out.println(st.pop());// }// int size=queNum.size();// for(int i=0;i 0) { String currOp; if (queOp.size() > 0) { currOp = queOp.poll(); } else { currOp = "0"; } switch (currOp) { case "×": st.push(st.pop() * st.pop()); break; case "÷": st.push(st.pop() / st.pop()); break; case "+": qu.add(st.pop()); newQueOp.add("+"); break; case "-": qu.add(st.pop()); newQueOp.add("-"); break; default: qu.add(st.pop()); } } //正常运算 if (qu.size() > 0) { double res = qu.poll(); while (qu.size() > 0) { String op = ""; if (newQueOp.size() > 0) { op = newQueOp.poll(); } else { op = "none"; } switch (op) { case "+": res += qu.poll(); break; case "-": res -= qu.poll(); break; default: System.out.println("none"); } } return res; } return 0.0; }} 以上就是关于"如何用Android开发实现简单的计算器功能"这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注行业资讯频道。
数字
运算
结果
按钮
字符
运算符
内容
符号
计算器
四则
式子
根号
算法
表达式
检查
功能
开发
小数
小数点
文本
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网黑科技
互联网新科技
河南云网互联网络科技有限公司
鸠鸠互联网科技
互联网科技会
北京互联网科技有限公司
深圳互联网络科技有限公司
狮子座互联网科技
成都互联网科技公司
西藏七维空间互联网科技有限公司
济南华为互联网科技产业总部基地
南山科技园互联网公司有哪些
语蝶互联网科技有限公司
燊美集互联网科技有限公司
深圳市罗太互联网科技有限公司
工业互联网山东科技大学
高科技互联网套路
南通创西澳互联网科技有限公司
长沙渺峰互联网科技有限公司
互联网科技创新方面的资料
为想互联网科技怎么样
互联网科技保险
友谊互联网络科技
互联网 视角下的科技创新
互联网科技小额贷款
互联网 科技服务平台
蓝色互联网科技
互联网和黑科技的看法
合肥互联网科技公司公章图片
宇信科技在杭州互联网排第几