♻️ 资源大小3.07MB➡️资源下载https://download.csdn.net/download/s1t16/87430312科学计算器一、产品概述计算器它是一个拥有扁平化优雅用户界面的科学计算器拥有科学计算与基础计算器功能可以计算是是数学表达式从一个简单的表达式如“12”到更高级的表达式如“33*980sin90” 除了可以实现了系统自带计算器功能外还可以进行基本函数的运算和括号的运算能根据表达式的优先级来自动区分运算顺序。它可以记住你的计算添加强大的容错处理功能如点击空小数点默认为 0除数不能为 0log、根号与 sin 等符号中的数不能为负等。二、面向人群高中生,大学生等三、产品版本及兼容适用于 Android 操作系统目标 API 4.1向下兼容 API 4.0四、思想计算器计算表达式过程获取用户点击按钮输入的表达式的字符串检验合法性通过StringTokenizer expToken new StringTokenizer(expression, -×÷()sctgl!√^);截取表达式从左向右扫描数字入 number 栈运算符入 operator 栈优先级定义 -基本优先级为 1×÷ 基本优先级为 2log ln sin cos tan n!基本优先级为 3√^ 基本优先级为 4 括号内层运算符比外层同级运算符优先级高 4当前运算符优先级高于栈顶压栈低于栈顶弹出一个运算符与两个数进行运算重复直到当前运算符大于栈顶扫描完后对剩下的运算符与数字依次计算五、设计计算器用户界面布局输入模块主要描述了计算器键盘以及键盘上的监听即主要负责读取用户的键盘输入以及相应触屏的按键当用户点击按键或者屏幕的时候监听器会去调用相应的处理办法具体的处理办法会在相关的地方进行说明。在本项目中在触屏上提供了各种功能的按键分别是 C,0,1,2,3,4,5,6,7,8,9-*/MC根号平方退格退出显示模块主要描述了计算器的显示区即该区域用于显示用户输入的数据以及最终的计算结果和一些其他信息。功能实现计算模块的设计的实现计算模块主要描述了计算器的整体实现了计算器的界面定义了用户单击的处理办法通过定义的处理办法来完成用户的操作命令实现用户的计算要求这些要求包括了数值的输入小数点的输入正负号的输入记忆相关功能的完成加减乘除等各计算功能的完成运算符的替换初始化系统等等。主要类只有一个里面还有一个内部类主要类即public class MainActivity extends Activity该类包含的属性private Button[] btn// 0~9十个数字 private EditText input;// 用于显示输出结果 private TextView mem, _drg;//mem显示memory中所存的表达式及结果_drg:当前是角度还是弧度DRG是角度RAD是弧度 private Button div, mul, sub, add, equal, sin, cos, tan, log, ln, sqrt,square, factorial阶乘, bksp退格, left, right, dot, exit, drg角度弧度键, mc, c; public String str_old;//原来输入的字符串 public String str_new;//为了便于计算而简化后的字符串 public boolean vbegin true;// 控制输入true为重新输入false为接着输入清屏后输入和继续输入public boolean drg_flag true;// true为角度false为弧度 public double pi 4 * Math.atan(1);// π值 public boolean tip_lock true;// true为正确可以继续输入false错误输入锁定 public boolean equals_flag true;// 是否在按下之后输入true为之前false为之后方法protected void onCreate(Bundle savedInstanceState) //运行时调用 InitWigdet(); //初始化所有的组件 private void AllWigdetListener();//为所有按钮绑定监听器 //命令捕捉 private OnClickListener actionPerformed new OnClickListener()新建一个对象public void onClick(View v) {按键上的命令获取显示器上的字符串检测输入是否合法检测显示器上的字符串是否合法调用后面的 right函数若输入正确则将输入信息显示到显示器上如果点击了“DRG”则切换当前弧度角度制并将切换后的结果显示到按键上方。如果输入时退格键并且是在按之前 一次删除 3 个字符2 个1 个之前输入不合法则删除全部调用后面的 right函数判断是否合法调用后面的函数 private int TTO (String str)判断是一个两个还是三个如果是在按之后输入退格键则将显示器内容设置为 0如果输入的是清除键则将显示器内容设置为 0重新输入标志置为 true表明可以继续输入表明输入之前如果输入的是”MC“则将存储器内容清 0如果按”exit“则退出程序弹出一个对话框“请确认记录必要数据后再退出系统”如果输入的是号并且输入合法调用后面的 right函数表明不可以继续输入表明输入之后保存原来算式样子替换算式中的运算符便于计算重新输入标志设置 true将-1x 转换成-计算算式结果调用 calc里面的函数表明可以继续输入private void print(String str) //将信息显示在显示屏上核心内部类 public class calc {public calc()//构造函数 final int MAXLEN 500;//栈的大小 public void process(String str)计算过程获取用户点击按钮输入的表达式的字符串检验合法性通过StringTokenizer expToken new StringTokenizer(expression, -×÷()sctgl!√^);截取表达式从左向右扫描数字入 number 栈运算符入 operator 栈优先级定义 -基本优先级为 1×÷ 基本优先级为 2log ln sin cos tan n!基本优先级为 3√^ 基本优先级为 4 括号内层运算符比外层同级运算符优先级高 4当前运算符优先级高于栈顶压栈低于栈顶弹出一个运算符与两个数进行运算重复直到当前运算符大于栈顶扫描完后对剩下的运算符与数字依次计算·变量int weightPlus 0, topOp 0, topNum 0, flag 1, weightTemp 0;// weightPlus为同一下的基本优先级weightTemp临时记录优先级的变化 // topOp为weight[]operator[]的计数器topNum为number[]的计数器 // flag为正负数的计数器1为正数-1为负数 int weight[]; // 保存operator栈中运算符的优先级以topOp计数 double number[]; // 保存数字以topNum计数 char ch, ch_gai, operator[];// operator[]保存运算符以topOp计数String num;// 记录数字str以-×÷()sctgl!√^分段-×÷()sctgl!√^字符之间的字符串即为数字 weight new int[MAXLEN];//符号栈中符号对应的优先级 number new double[MAXLEN]; operator new char[MAXLEN]; String expression str; StringTokenizer expToken new StringTokenizer(expression,-×÷()sctgl!√^);//按符号分割字符串取得字符串后:判断正负数取得数字并将正负符号转移给数字取得整个数字将指针退回之前的位置将正负符号转移给数字计算运算符的优先级如果当前优先级大于堆栈顶部元素则直接入栈否则将堆栈中运算符逐个取出直到当前堆栈顶部运算符的优先级小于当前运算符取出数字数组的相应元素进行运算 sin 等三角函数计算时要进行角度弧度的判断及转换依次取出堆栈的运算符进行运算得到结果后如果是数字太大提示错误信息输出最终结果public double FP(double n) ;FP floating point 控制小数位数达到精度 否则会出现-0.20.39999999999999997 的情况用 FP 即可解决使得数为 0.4 本格式精度为 15 位public double N(double n);//阶乘算法 public void showError(int code, String str)//错误提示按了之后若计算式在process()过程中出现错误则进行提示六、调试及测试计算器各类表达式计算与清零容错处理与退出七、不足与改进方向允许输入以 0 开头的数字如“00000006000028”我们因该该禁止无效数字 0 的输入允许输入“0.0000000000000000000000000000000000000000000000000000001”从而超过了显示的范围造成数字不能完全显示应该规定最长输入数如果超出就警告不能进行科学计数法的输入就是如果想计算“0.00000000000000000000000000000000000000000000000000000012”因为前面一个数位数太多会输入不进去所以就不能计算应该提供科学计数法的输入如 0.1*E-302 等。不能计算 “0 除以 0”按照 matlab 标准应该为 NaN ,即无解我们显示为“0 不能做除数”如果连续输入多个符号应该不断变化显示并且最终显示最后一个符号并且按照最后一个符号来计算如输入“8/*--2”显示的地方不断变化最终显示“8*2”并且计算结果为 16其实这样就方便了用户使用例如本来想输入“82”结果输入了“8/”符号输入错误了这时候一般还要 输入退格键这样很麻烦如果可以再输入一个“”并且覆盖错误输入的“/”就方便多了。主要按钮应该大一点并且占据主要位置如等于号加号计算器界面风格为扁平化背景炫酷但是按钮的位置不清晰造成年龄较大的用户使用不方便应该把主要按钮的轮廓勾勒出来并且增加点击后效果。
基于Android的科学计算器
发布时间:2026/6/5 13:13:33
♻️ 资源大小3.07MB➡️资源下载https://download.csdn.net/download/s1t16/87430312科学计算器一、产品概述计算器它是一个拥有扁平化优雅用户界面的科学计算器拥有科学计算与基础计算器功能可以计算是是数学表达式从一个简单的表达式如“12”到更高级的表达式如“33*980sin90” 除了可以实现了系统自带计算器功能外还可以进行基本函数的运算和括号的运算能根据表达式的优先级来自动区分运算顺序。它可以记住你的计算添加强大的容错处理功能如点击空小数点默认为 0除数不能为 0log、根号与 sin 等符号中的数不能为负等。二、面向人群高中生,大学生等三、产品版本及兼容适用于 Android 操作系统目标 API 4.1向下兼容 API 4.0四、思想计算器计算表达式过程获取用户点击按钮输入的表达式的字符串检验合法性通过StringTokenizer expToken new StringTokenizer(expression, -×÷()sctgl!√^);截取表达式从左向右扫描数字入 number 栈运算符入 operator 栈优先级定义 -基本优先级为 1×÷ 基本优先级为 2log ln sin cos tan n!基本优先级为 3√^ 基本优先级为 4 括号内层运算符比外层同级运算符优先级高 4当前运算符优先级高于栈顶压栈低于栈顶弹出一个运算符与两个数进行运算重复直到当前运算符大于栈顶扫描完后对剩下的运算符与数字依次计算五、设计计算器用户界面布局输入模块主要描述了计算器键盘以及键盘上的监听即主要负责读取用户的键盘输入以及相应触屏的按键当用户点击按键或者屏幕的时候监听器会去调用相应的处理办法具体的处理办法会在相关的地方进行说明。在本项目中在触屏上提供了各种功能的按键分别是 C,0,1,2,3,4,5,6,7,8,9-*/MC根号平方退格退出显示模块主要描述了计算器的显示区即该区域用于显示用户输入的数据以及最终的计算结果和一些其他信息。功能实现计算模块的设计的实现计算模块主要描述了计算器的整体实现了计算器的界面定义了用户单击的处理办法通过定义的处理办法来完成用户的操作命令实现用户的计算要求这些要求包括了数值的输入小数点的输入正负号的输入记忆相关功能的完成加减乘除等各计算功能的完成运算符的替换初始化系统等等。主要类只有一个里面还有一个内部类主要类即public class MainActivity extends Activity该类包含的属性private Button[] btn// 0~9十个数字 private EditText input;// 用于显示输出结果 private TextView mem, _drg;//mem显示memory中所存的表达式及结果_drg:当前是角度还是弧度DRG是角度RAD是弧度 private Button div, mul, sub, add, equal, sin, cos, tan, log, ln, sqrt,square, factorial阶乘, bksp退格, left, right, dot, exit, drg角度弧度键, mc, c; public String str_old;//原来输入的字符串 public String str_new;//为了便于计算而简化后的字符串 public boolean vbegin true;// 控制输入true为重新输入false为接着输入清屏后输入和继续输入public boolean drg_flag true;// true为角度false为弧度 public double pi 4 * Math.atan(1);// π值 public boolean tip_lock true;// true为正确可以继续输入false错误输入锁定 public boolean equals_flag true;// 是否在按下之后输入true为之前false为之后方法protected void onCreate(Bundle savedInstanceState) //运行时调用 InitWigdet(); //初始化所有的组件 private void AllWigdetListener();//为所有按钮绑定监听器 //命令捕捉 private OnClickListener actionPerformed new OnClickListener()新建一个对象public void onClick(View v) {按键上的命令获取显示器上的字符串检测输入是否合法检测显示器上的字符串是否合法调用后面的 right函数若输入正确则将输入信息显示到显示器上如果点击了“DRG”则切换当前弧度角度制并将切换后的结果显示到按键上方。如果输入时退格键并且是在按之前 一次删除 3 个字符2 个1 个之前输入不合法则删除全部调用后面的 right函数判断是否合法调用后面的函数 private int TTO (String str)判断是一个两个还是三个如果是在按之后输入退格键则将显示器内容设置为 0如果输入的是清除键则将显示器内容设置为 0重新输入标志置为 true表明可以继续输入表明输入之前如果输入的是”MC“则将存储器内容清 0如果按”exit“则退出程序弹出一个对话框“请确认记录必要数据后再退出系统”如果输入的是号并且输入合法调用后面的 right函数表明不可以继续输入表明输入之后保存原来算式样子替换算式中的运算符便于计算重新输入标志设置 true将-1x 转换成-计算算式结果调用 calc里面的函数表明可以继续输入private void print(String str) //将信息显示在显示屏上核心内部类 public class calc {public calc()//构造函数 final int MAXLEN 500;//栈的大小 public void process(String str)计算过程获取用户点击按钮输入的表达式的字符串检验合法性通过StringTokenizer expToken new StringTokenizer(expression, -×÷()sctgl!√^);截取表达式从左向右扫描数字入 number 栈运算符入 operator 栈优先级定义 -基本优先级为 1×÷ 基本优先级为 2log ln sin cos tan n!基本优先级为 3√^ 基本优先级为 4 括号内层运算符比外层同级运算符优先级高 4当前运算符优先级高于栈顶压栈低于栈顶弹出一个运算符与两个数进行运算重复直到当前运算符大于栈顶扫描完后对剩下的运算符与数字依次计算·变量int weightPlus 0, topOp 0, topNum 0, flag 1, weightTemp 0;// weightPlus为同一下的基本优先级weightTemp临时记录优先级的变化 // topOp为weight[]operator[]的计数器topNum为number[]的计数器 // flag为正负数的计数器1为正数-1为负数 int weight[]; // 保存operator栈中运算符的优先级以topOp计数 double number[]; // 保存数字以topNum计数 char ch, ch_gai, operator[];// operator[]保存运算符以topOp计数String num;// 记录数字str以-×÷()sctgl!√^分段-×÷()sctgl!√^字符之间的字符串即为数字 weight new int[MAXLEN];//符号栈中符号对应的优先级 number new double[MAXLEN]; operator new char[MAXLEN]; String expression str; StringTokenizer expToken new StringTokenizer(expression,-×÷()sctgl!√^);//按符号分割字符串取得字符串后:判断正负数取得数字并将正负符号转移给数字取得整个数字将指针退回之前的位置将正负符号转移给数字计算运算符的优先级如果当前优先级大于堆栈顶部元素则直接入栈否则将堆栈中运算符逐个取出直到当前堆栈顶部运算符的优先级小于当前运算符取出数字数组的相应元素进行运算 sin 等三角函数计算时要进行角度弧度的判断及转换依次取出堆栈的运算符进行运算得到结果后如果是数字太大提示错误信息输出最终结果public double FP(double n) ;FP floating point 控制小数位数达到精度 否则会出现-0.20.39999999999999997 的情况用 FP 即可解决使得数为 0.4 本格式精度为 15 位public double N(double n);//阶乘算法 public void showError(int code, String str)//错误提示按了之后若计算式在process()过程中出现错误则进行提示六、调试及测试计算器各类表达式计算与清零容错处理与退出七、不足与改进方向允许输入以 0 开头的数字如“00000006000028”我们因该该禁止无效数字 0 的输入允许输入“0.0000000000000000000000000000000000000000000000000000001”从而超过了显示的范围造成数字不能完全显示应该规定最长输入数如果超出就警告不能进行科学计数法的输入就是如果想计算“0.00000000000000000000000000000000000000000000000000000012”因为前面一个数位数太多会输入不进去所以就不能计算应该提供科学计数法的输入如 0.1*E-302 等。不能计算 “0 除以 0”按照 matlab 标准应该为 NaN ,即无解我们显示为“0 不能做除数”如果连续输入多个符号应该不断变化显示并且最终显示最后一个符号并且按照最后一个符号来计算如输入“8/*--2”显示的地方不断变化最终显示“8*2”并且计算结果为 16其实这样就方便了用户使用例如本来想输入“82”结果输入了“8/”符号输入错误了这时候一般还要 输入退格键这样很麻烦如果可以再输入一个“”并且覆盖错误输入的“/”就方便多了。主要按钮应该大一点并且占据主要位置如等于号加号计算器界面风格为扁平化背景炫酷但是按钮的位置不清晰造成年龄较大的用户使用不方便应该把主要按钮的轮廓勾勒出来并且增加点击后效果。