日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

Android開發(fā)實現(xiàn)簡單計算器功能

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

計算器項目,要求實現(xiàn)加、減、乘、除、求倒數(shù)、求平方根等簡單運算。

真機調(diào)試結(jié)果如下圖:

Android開發(fā)實現(xiàn)簡單計算器功能

布局文件: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://m.b3g6.com/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; // 當前的計算結(jié)果private String showText = ''; // 顯示的文本內(nèi)容private final StringBuilder builder=new StringBuilder(); //存儲運算式子的字符串構(gòu)造器@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 , // 數(shù)字7 R.id.btn_eight , // 數(shù)字8 R.id.btn_nine , // 數(shù)字9 R.id.btn_plus , // “加法”按鈕 R.id.btn_four , // 數(shù)字4 R.id.btn_five , // 數(shù)字5 R.id.btn_six , // 數(shù)字6 R.id.btn_minus , // “減法”按鈕 R.id.btn_one , // 數(shù)字1 R.id.btn_two , // 數(shù)字2 R.id.btn_three , // 數(shù)字3 R.id.btn_reciprocal , // 求倒數(shù)按鈕 R.id.btn_zero , // 數(shù)字0 R.id.btn_dot , // “小數(shù)點”按鈕 R.id.btn_equal , // “等號”按鈕 R.id.ib_sqrt // “開平方”按鈕 }; for(int buttonId:buttonSeq)findViewById(buttonId).setOnClickListener(this); builder.append(0);}//符號分類//數(shù)字//四則運算符//小數(shù)點//根號,倒數(shù),等號,直接出結(jié)果//CE C@Overridepublic void onClick(View v) { int id=v.getId(); String inputText='';//if(result!=0){ //如果結(jié)果不為0,則按照結(jié)果進行運算// clear();// builder.append(result);//} //若不為根號,因為根號按鈕無法取值 if(id!=R.id.ib_sqrt) {inputText = ((TextView) v).getText().toString();//判斷是否為數(shù)字、小數(shù)點以及四則運算符if (inputText.matches('d|.')) { //輸入是否為數(shù)字或點號 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, '沒有數(shù)字可刪了', 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{ // 點擊了開根號,由于算法不支持有運算符在前,目前已經(jīng)支持resultCheck(); //經(jīng)過一次檢查結(jié)果被清零,結(jié)果存于builder中 result = Math.sqrt(CoreAlgorithm.calExp(builder.toString())); refreshText('√(' + builder.toString() + ')=n' + result); }}//檢查整個表達式public boolean verifyExp(String exp){ //驗證整個表達式是否合法 String lastNum=''; String[] sp=exp.split('+|-|×|÷'); //將操作數(shù)分割出來 char lastChar=exp.charAt(exp.length()-1); //獲得最后一個字符 lastNum=sp[sp.length-1]; //取得最后一位操作數(shù) if(String.valueOf(lastChar).matches('+|-|×|÷')) //如果當前符號為四則運算符 {lastNum='';return exp.matches('.*(d[+-×÷])|.*(.[+-×÷])'); //驗證最后的運算符是否符合只有一個原則 }else{ //最后一位為運算數(shù)return lastNum.matches('^[-]?d*.?d*'); //驗證最后一位運算數(shù)是否合法 }}// 刷新文本顯示private void refreshText(String text) { showText = text; tv_result.setText(showText);}// 清空并初始化private void clear() { builder.delete(0, builder.length()); showText='';}//基本每個出結(jié)果的按鈕都要執(zhí)行一次這個函數(shù)public void resultCheck(){ //運算結(jié)果檢查,有結(jié)果用結(jié)果,結(jié)果不為數(shù)字進行處理 if(result!=0){ //如果結(jié)果不為0,則按照結(jié)果進行運算String res=String.valueOf(result);if(res.matches('^[-]?d*.?d*')){ //若為浮點數(shù)字 clear(); builder.append(result); result=0; //結(jié)果不清零,檢查的時候就會一直重復(fù)放入結(jié)果}else{ //若結(jié)果為字母,分母為0會返回Infinity,以及負數(shù)開方 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<>(); //原始數(shù)字棧private static final Queue<Double> qu = new ArrayDeque<>(); //序列化數(shù)字隊列,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'; //本算法似乎不支持符號在前面,目前算法已經(jīng)改進 //處理運算符在式子最后 if (exp.matches('.*[+-×÷]')) {exp = exp.substring(0, exp.length() - 1); } String[] sp; //存放分割數(shù)組 //運算符在式子最前面 if (exp.matches('[+-×÷].*')) {String fistElem=exp.substring(0,1); //截取首個字符exp=exp.substring(1); //舍去首個字符//分割字符,提取數(shù)字sp = exp.split('+|-|×|÷');if(fistElem.equals('-')){ //首個字符為負號 sp[0]='-'+sp[0];//添加負號} }else{ //沒有符號在前sp = exp.split('+|-|×|÷'); } //之前直接分割字符會導(dǎo)致,數(shù)組第一位為空,導(dǎo)致程序無法運行 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;}}

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標簽: Android
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
婷婷亚洲综合| 亚洲专区在线| 免费欧美日韩| 99pao成人国产永久免费视频| 丝袜美腿诱惑一区二区三区 | 久久精品欧美一区| 正在播放日韩精品| 水蜜桃精品av一区二区| 老司机精品视频网| 国产精品亚洲一区二区在线观看| 日韩avvvv在线播放| 少妇精品在线| 老牛国产精品一区的观看方式| 美女久久网站| 一区二区三区国产盗摄| 亚洲乱码一区| 国产欧美另类| 国产一区二区精品久| 成人国产精品一区二区网站| 亚洲永久av| 久久精品在线| 午夜在线观看免费一区| 亚洲精品婷婷| 国产精品主播| 韩国一区二区三区视频| 电影亚洲精品噜噜在线观看| 91成人精品视频| 亚洲精品中文字幕乱码| 午夜在线精品偷拍| 欧美日韩一区二区三区四区在线观看 | 91欧美日韩在线| 欧美精品导航| 亚洲欧洲高清| 国产精品美女久久久| 自拍自偷一区二区三区| 国产亚洲一卡2卡3卡4卡新区| 麻豆精品少妇| 久久精品青草| 亚洲欧洲一区二区天堂久久| 日本一区中文字幕| 国产精品精品| 首页欧美精品中文字幕| 国产精品中文字幕亚洲欧美| 久久久久.com| 亚洲精品美女| av日韩中文| 美女精品在线| 九九久久国产| 亚洲精品成人| 欧美经典一区| 夜夜嗨网站十八久久| 欧美日韩亚洲一区三区| 久久久一二三| 蜜臀av性久久久久蜜臀aⅴ四虎| 国产精品一区二区av日韩在线| 久久精品影视| 国产欧美三级| 欧美大黑bbbbbbbbb在线| 欧美在线看片| 国产尤物精品| 国产精品多人| 狠狠干成人综合网| 国产精品久久久久久久免费软件| 97人人精品| 亚洲制服欧美另类| 日韩国产一区| 97精品久久| 欧美精品一区二区久久| 日韩精品欧美大片| 日韩中文视频| 国产日韩欧美一区二区三区在线观看| 日韩欧美字幕| 国产精品一二| 一区二区国产在线| 亚洲国内精品| 麻豆免费精品视频| 亚洲一区二区三区中文字幕在线观看| 精品精品99| 日韩影片在线观看| 亚洲女同中文字幕| bbw在线视频| 国产日韩欧美一区二区三区在线观看 | 欧美xxxx中国| 欧美日一区二区在线观看| 红桃视频国产精品| 中文字幕在线视频久| 国产探花在线精品| 久久av在线| 99国产精品免费视频观看| 麻豆精品视频在线观看免费| 日本va欧美va瓶| 蜜桃av一区| 日韩中文在线播放| 国产精品入口久久| 免费在线看一区| 久久国产亚洲精品| 大香伊人久久精品一区二区| 国产精品最新| 欧美视频精品全部免费观看| 好吊视频一区二区三区四区| 久久久国产精品一区二区中文| 久久精品二区亚洲w码| 日本三级亚洲精品| 免费日韩精品中文字幕视频在线| 久久天堂成人| 久久精品影视| 国产日韩电影| 加勒比视频一区| 国产精品欧美一区二区三区不卡| 欧美专区在线| 亚洲在线国产日韩欧美| 国内亚洲精品| 日韩一区二区在线免费| 国产videos久久| 狠狠久久伊人| 麻豆成人91精品二区三区| 欧美日韩一区自拍| 欧美日韩1区2区3区| 日韩激情av在线| 亚洲最新av| 日韩一区二区三区免费视频| 久久亚洲风情| 久久国产精品毛片| 婷婷六月综合| 伊人久久亚洲影院| 在线成人直播| 免费不卡中文字幕在线| 日本一区二区高清不卡| 久久久久久色| 综合一区在线| 午夜性色一区二区三区免费视频| 欧美女激情福利| 亚洲激情婷婷| 99国产精品久久久久久久成人热| 91精品蜜臀一区二区三区在线| 日本在线精品| 欧美日韩精品一区二区视频| 日韩精品影视| 国产美女高潮在线| 亚洲天堂av影院| 久久蜜桃精品| 黄色国产精品| 久久午夜精品一区二区| 亚洲三级观看| 欧美久久久网站| 久久a爱视频| 正在播放日韩精品| 欧美精品九九| 亚洲我射av| 国产探花在线精品| 久久一区精品| 伊伊综合在线| 欧美日韩国产综合网| 亚洲电影在线一区二区三区| 国产视频亚洲| 亚洲精品福利| 久久久免费人体| 在线看片福利| 亚洲精品a级片| 婷婷综合一区| 欧美国产亚洲精品| 欧美日韩尤物久久| 99在线精品视频在线观看| 日韩久久99| 精品久久久网| 激情欧美一区二区三区| 免费在线观看日韩欧美| 国产日产精品一区二区三区四区的观看方式| 久久国内精品自在自线400部| 欧美视频一区| av在线资源| 另类国产ts人妖高潮视频| 日韩动漫一区| 国产成人精品亚洲线观看| 国产91精品对白在线播放| 亚洲精品四区| 国产成人精品福利| 欧美特黄视频| 国产福利一区二区精品秒拍 | 日韩精品免费一区二区三区| 国产精品美女久久久| 欧美日韩亚洲三区| 久久一区二区三区电影| 日韩激情啪啪| 日韩在线综合| 四虎精品永久免费| 国产一区二区三区精品在线观看| 欧美天堂亚洲电影院在线观看| 青青青国产精品| 综合视频一区| yellow在线观看网址| 免费人成精品欧美精品| 麻豆91在线播放| 一级欧洲+日本+国产| 国产精品巨作av| 狠狠爱成人网| 精品一区二区三区中文字幕视频| 亚洲免费婷婷| 欧美激情国产在线| 日日夜夜免费精品视频|