电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Android開發實現簡單計算器功能

瀏覽:131日期:2022-09-18 08:00:47

計算器項目,要求實現加、減、乘、除、求倒數、求平方根等簡單運算。

真機調試結果如下圖:

Android開發實現簡單計算器功能

布局文件:main_activity.xml

<?xml version='1.0' encoding='utf-8'?><LinearLayout xmlns:android='http://schemas.android.com/apk/res/android' android:layout_width='match_parent' android:layout_height='match_parent' android:background='#FFFFFF' android:orientation='vertical' android:padding='3dp'> <ScrollViewandroid:layout_width='match_parent'android:layout_height='wrap_content'><LinearLayout android:layout_width='match_parent' android:layout_height='wrap_content' android:orientation='vertical'> <TextViewandroid:layout_width='match_parent'android:layout_height='wrap_content'android:gravity='center'android:text='簡單計算器'android:textColor='#000000'android:textSize='20sp' /> <LinearLayoutandroid:layout_width='match_parent'android:layout_height='wrap_content'android:background='#ffffff'android:orientation='vertical'><TextView android: android:background='#4E4B4B' android:layout_width='match_parent' android:layout_height='wrap_content' android:gravity='right|bottom' android:lines='3' android:maxLines='3' android:scrollbars='vertical' android:text='0' android:textColor='#FFFFFF' android:textSize='35sp' /> </LinearLayout> <GridLayoutandroid:layout_width='match_parent'android:layout_height='match_parent'android:columnCount='4'><Button android: android:layout_width='85dp' android:layout_height='70dp' android:backgroundTint='@color/gray' android:gravity='center' android:shadowColor='@color/purple_500' android:text='CE' android:textColor='@color/black' android:textSize='30sp' android:layout_marginStart='5dp'/><Button android: android:layout_width='85dp' android:layout_height='70dp' android:backgroundTint='@color/gray' android:gravity='center' android:text='÷' android:textColor='@color/black' android:textSize='30sp' android:layout_marginStart='5dp'/><Button android: android:layout_width='85dp' android:layout_height='70dp' android:backgroundTint='@color/gray' android:gravity='center' android:text='×' android:textColor='@color/black' android:textSize='30sp' android:layout_marginStart='5dp'/><Button android: android:layout_width='85dp' android:layout_height='70dp' android:backgroundTint='@color/gray' android:gravity='center' android:text='C' android:textColor='@color/black' android:textSize='30sp' android:layout_marginStart='5dp'/><Button android: android:layout_width='85dp' android:layout_height='70dp' android:backgroundTint='@color/gray' android:gravity='center' android:text='7' android:textColor='@color/black' android:textSize='30sp' android:layout_marginStart='5dp'/><Button android: android:layout_width='85dp' android:layout_height='70dp' android:backgroundTint='@color/gray' android:gravity='center' android:text='8' android:textColor='@color/black' android:textSize='30sp' android:layout_marginStart='5dp' /><Button android: android:layout_width='85dp' android:layout_height='70dp' android:backgroundTint='@color/gray' android:gravity='center' android:text='9' android:textColor='@color/black' android:textSize='30sp' android:layout_marginStart='5dp'/><Button android: android:layout_width='85dp' android:layout_height='70dp' android:backgroundTint='@color/gray' android:gravity='center' android:text='+' android:textColor='@color/black' android:textSize='30sp' android:layout_marginStart='5dp'/><Button android: android:layout_width='85dp' android:layout_height='70dp' android:backgroundTint='@color/gray' android:gravity='center' android:text='4' android:textColor='@color/black' android:textSize='30sp' android:layout_marginStart='5dp'/><Button android: android:layout_width='85dp' android:layout_height='70dp' android:backgroundTint='@color/gray' android:gravity='center' android:text='5' android:textColor='@color/black' android:textSize='30sp' android:layout_marginStart='5dp'/><Button android: android:layout_width='85dp' android:layout_height='70dp' android:backgroundTint='@color/gray' android:gravity='center' android:text='6' android:textColor='@color/black' android:textSize='30sp' android:layout_marginStart='5dp'/><Button android: android:layout_width='85dp' android:layout_height='70dp' android:backgroundTint='@color/gray' android:gravity='center' android:text='-' android:textColor='@color/black' android:textSize='30sp' android:layout_marginStart='5dp'/><Button android: android:layout_width='85dp' android:layout_height='70dp' android:backgroundTint='@color/gray' android:gravity='center' android:text='1' android:textColor='@color/black' android:textSize='30sp' android:layout_marginStart='5dp'/><Button android: android:layout_width='85dp' android:layout_height='70dp' android:backgroundTint='@color/gray' android:gravity='center' android:text='2' android:textColor='@color/black' android:textSize='30sp' android:layout_marginStart='5dp'/><Button android: android:layout_width='85dp' android:layout_height='70dp' android:backgroundTint='@color/gray' android:gravity='center' android:text='3' android:textColor='@color/black' android:textSize='30sp' android:layout_marginStart='5dp'/><ImageButton android: android:layout_width='90dp' android:layout_height='70dp' android:backgroundTint='@color/gray' android:scaleType='centerInside' android:src='http://www.hdgsjgj.cn/bcjs/@drawable/sqrt' android:gravity='center' android:layout_marginStart='4dp'/><Button android: android:layout_width='85dp' android:layout_height='70dp' android:backgroundTint='@color/gray' android:gravity='center' android:text='1/x' android:textColor='@color/black' android:textSize='28sp' android:layout_marginStart='5dp'/><Button android: android:layout_width='85dp' android:layout_height='70dp' android:backgroundTint='@color/gray' android:gravity='center' android:text='0' android:textColor='@color/black' android:textSize='30sp' android:layout_marginStart='5dp'/><Button android: android:layout_width='85dp' android:layout_height='70dp' android:backgroundTint='@color/gray' android:gravity='center' android:text='.' android:textColor='@color/black' android:textSize='30sp' android:layout_marginStart='5dp'/><Button android: android:layout_width='85dp' android:layout_height='70dp' android:backgroundTint='@color/gray' android:gravity='center' android:text='=' android:textColor='@color/black' android:textSize='30sp' android:layout_marginStart='5dp'/> </GridLayout></LinearLayout> </ScrollView></LinearLayout>

活動頁面: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(); //存儲運算式子的字符串構造器@Overrideprotected 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@Overridepublic 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<Double> st = new Stack<>(); //原始數字棧private static final Queue<Double> qu = new ArrayDeque<>(); //序列化數字隊列,private static final Queue<String> queOp = new ArrayDeque<>();//符號隊列private static final Queue<String> 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<size;i++)// System.out.println(queNum.poll()); //運算降級序列化 while (st.size() > 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
相關文章:
主站蜘蛛池模板: 礼至家居-全屋定制家具_一站式全屋整装_免费量房设计报价 | 暴风影音| 固诺家居-全屋定制十大品牌_整体衣柜木门橱柜招商加盟 | 阴离子_阳离子聚丙烯酰胺厂家_聚合氯化铝价格_水处理絮凝剂_巩义市江源净水材料有限公司 | 煤矿支护网片_矿用勾花菱形网_缝管式_管缝式锚杆-邯郸市永年区志涛工矿配件有限公司 | 艾乐贝拉细胞研究中心 | 国家组织工程种子细胞库华南分库 | 云南丰泰挖掘机修理厂-挖掘机维修,翻新,再制造的大型企业-云南丰泰工程机械维修有限公司 | 电销卡_稳定企业大语音卡-归属地可选-世纪通信 | 螺旋压榨机-刮泥机-潜水搅拌机-电动泥斗-潜水推流器-南京格林兰环保设备有限公司 | 讲师宝经纪-专业培训机构师资供应商_培训机构找讲师、培训师、讲师经纪就上讲师宝经纪 | 玻纤土工格栅_钢塑格栅_PP焊接_单双向塑料土工格栅_复合防裂布厂家_山东大庚工程材料科技有限公司 | 制冷采购电子商务平台——制冷大市场| 胜为光纤光缆_光纤跳线_单模尾纤_光纤收发器_ODF光纤配线架厂家直销_北京睿创胜为科技有限公司 - 北京睿创胜为科技有限公司 | 美甲贴片-指甲贴片-穿戴美甲-假指甲厂家--薇丝黛拉 | 铝合金风口-玻璃钢轴流风机-玻璃钢屋顶风机-德州东润空调设备有限公司 | 污水提升器,污水提升泵,地下室排水,增压泵,雨水泵,智能供排水控制器-上海智流泵业有限公司 | 吸污车_吸粪车_抽粪车_电动三轮吸粪车_真空吸污车_高压清洗吸污车-远大汽车制造有限公司 | 铝箔袋,铝箔袋厂家,东莞铝箔袋,防静电铝箔袋,防静电屏蔽袋,防静电真空袋,真空袋-东莞铭晋让您的产品与众不同 | 高温链条油|高温润滑脂|轴承润滑脂|机器人保养用油|干膜润滑剂-东莞卓越化学 | 检验科改造施工_DSA手术室净化_导管室装修_成都特殊科室建设厂家_医疗净化工程公司_四川华锐 | 「银杏树」银杏树行情价格_银杏树种植_山东程锦园林 | 无锡门窗-系统门窗-阳光房-封阳台-断桥铝门窗厂[窗致美] | 专业广州网站建设,微信小程序开发,一物一码和NFC应用开发、物联网、外贸商城、定制系统和APP开发【致茂网络】 | 馋嘴餐饮网_餐饮加盟店火爆好项目_餐饮连锁品牌加盟指南创业平台 | 阿米巴企业经营-阿米巴咨询管理-阿米巴企业培训-广东键锋企业管理咨询有限公司 | 执业药师报名时间,报考条件,考试时间-首页入口 | 天津暖气片厂家_钢制散热器_天津铜铝复合暖气片_维尼罗散热器 | 首页_中夏易经起名网 | 12cr1mov无缝钢管切割-15crmog无缝钢管切割-40cr无缝钢管切割-42crmo无缝钢管切割-Q345B无缝钢管切割-45#无缝钢管切割 - 聊城宽达钢管有限公司 | 桑茶-七彩贝壳桑叶茶 长寿茶 | 飞行者联盟-飞机模拟机_无人机_低空经济_航空技术交流平台 | 内六角扳手「厂家」-温州市威豪五金工具有限公司 | 武汉高低温试验机-现货恒温恒湿试验箱-高低温湿热交变箱价格-湖北高天试验设备 | 智能汉显全自动量热仪_微机全自动胶质层指数测定仪-鹤壁市科达仪器仪表有限公司 | 爆炸冲击传感器-无线遥测传感器-航天星百科 | 团建-拓展-拓展培训-拓展训练-户外拓展训练基地[无锡劲途] | PVC地板|PVC塑胶地板|PVC地板厂家|地板胶|防静电地板-无锡腾方装饰材料有限公司-咨询热线:4008-798-128 | 新能源汽车电池软连接,铜铝复合膜柔性连接,电力母排-容发智能科技(无锡)有限公司 | 湖北省煤炭供应链综合服务平台 | 蔬菜配送公司|蔬菜配送中心|食材配送|饭堂配送|食堂配送-首宏公司 | 分子精馏/精馏设备生产厂家-分子蒸馏工艺实验-新诺舜尧(天津)化工设备有限公司 |