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

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

Android studio實(shí)現(xiàn)簡(jiǎn)單計(jì)算器

瀏覽:69日期:2022-09-27 08:08:12

本文實(shí)例為大家分享了Android studio實(shí)現(xiàn)簡(jiǎn)單計(jì)算器的具體代碼,供大家參考,具體內(nèi)容如下

需求分析

在Android studio中設(shè)計(jì)并實(shí)現(xiàn)一個(gè)簡(jiǎn)單的計(jì)算器,實(shí)現(xiàn)連續(xù)的加減乘除運(yùn)算。

界面設(shè)計(jì)

采用網(wǎng)格GridLayout布局,設(shè)計(jì)了一個(gè)6行4列的網(wǎng)格,最上邊是一個(gè)EditText用來顯示用戶輸入的運(yùn)算數(shù)字和運(yùn)算符,以及相關(guān)的運(yùn)算結(jié)果,其占4列,文本框大小為50dip;依次往下的界面分別設(shè)置了數(shù)字和運(yùn)算符以及操作的按鈕,各行各列的每個(gè)按鈕的大小均設(shè)為26sp。

編程分析

設(shè)計(jì)了兩個(gè)文件:1、控制文件MainActivity.java,完成按鈕的處理事件以及實(shí)現(xiàn)加減乘除及其結(jié)果輸出的功能,主要包括:顯示activity_main.xml定義的用戶界面;與用戶界面程序中的組件建立關(guān)聯(lián),并分別為每個(gè)組件注冊(cè)并實(shí)現(xiàn)監(jiān)聽接口;根據(jù)具體輸入和條件進(jìn)行運(yùn)算并顯示結(jié)果等。2、布局文件activity_main.xml,完成計(jì)算器界面的網(wǎng)格布局設(shè)計(jì),包括了一個(gè)文本編輯框和18個(gè)按鈕。

具體進(jìn)度

第1天:對(duì)簡(jiǎn)單計(jì)算器進(jìn)行系統(tǒng)的功能和界面分析,形成自己大致的設(shè)計(jì)想法,然后根據(jù)老師建議的書本程序以及自己上網(wǎng)搜索的安卓項(xiàng)目的編程,系統(tǒng)地總結(jié)出自己編程的過程以及開始理解各類代碼。由于對(duì)移動(dòng)編程這門課還不是很熟悉,所以對(duì)其中編程部分的理解為自己往后調(diào)試程序有很大的幫助。

第2天:開始敲代碼。由于第一次在Android studio上面編程,對(duì)這個(gè)軟件的各項(xiàng)操作都不熟悉,所以剛開始就在軟件摸索上面花費(fèi)了較多的時(shí)間。由于此次設(shè)計(jì)的界面老師給了我們書本的模板,所以我選擇從簡(jiǎn)單的布局文件的設(shè)計(jì)開始編程,一方面也方便自己熟悉Android studio。

第3天:開始根據(jù)自己的理解和想法開始設(shè)計(jì)并調(diào)試控制文件的程序。由于這部分設(shè)計(jì)到多種函數(shù)以及接口的設(shè)計(jì)以及實(shí)現(xiàn),運(yùn)用的是java,由于對(duì)過去學(xué)的java語言有些遺忘了,而且現(xiàn)在還要涉及關(guān)于新知識(shí).xml的結(jié)合,所以在這部分花的時(shí)間比較長(zhǎng)。期間出現(xiàn)了較多的bug,雖然調(diào)試起來很吃力,但最終一點(diǎn)點(diǎn)把程序調(diào)試成功還是挺開心的。

第4天:原本以為程序調(diào)試成功就好了,但是沒想到最后在AVD的各種選擇和配置、調(diào)用問題上花了更多的時(shí)間和精力。由于第一次接觸Android studio,所以對(duì)其中很多配置都不了解,也是第一次聽說AVD,在最終運(yùn)行這個(gè)計(jì)算器APP的時(shí)候在AVD的選擇和配置失敗上卡了較長(zhǎng)時(shí)間,通過百度以及請(qǐng)教同學(xué),一步步地終于把最后這一步做好了。至此便完成了自己第一個(gè)簡(jiǎn)單APP的開發(fā)。

心得體會(huì)

這是我的第一個(gè)安卓項(xiàng)目開發(fā),這個(gè)計(jì)算器代碼的邏輯都比較簡(jiǎn)單,然后其功能也很不完善,是一個(gè)比較粗糙的設(shè)計(jì)。即便如此,由于自己對(duì)Android studio應(yīng)用程序設(shè)計(jì)的知識(shí)掌握得也不是很好,編程能力也比較弱,所以還是花了比較多的時(shí)間去研究和體會(huì)。但是,也正因?yàn)槠陂g遇到的很多困難和bug,在自己一點(diǎn)點(diǎn)去設(shè)法解決的過程中也對(duì)這門課程的理論知識(shí)以及相關(guān)操作都有了更清晰的了解,現(xiàn)在明白了其中和大致框架和原理,為往后深入的學(xué)習(xí)和編程做好多一點(diǎn)基礎(chǔ)鞏固。

Android studio實(shí)現(xiàn)簡(jiǎn)單計(jì)算器

控制文件MainActivity.java

package com.example.df.firstapp; import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.Button; //引用按鈕組件import android.widget.EditText; //引用文本編輯框組件import android.text.TextUtils; //TextUtils類用于處理字符串 //定義實(shí)現(xiàn)監(jiān)聽接口的類MainActivitypublic class MainActivity extends AppCompatActivity implements View.OnClickListener { //聲明17個(gè)按鈕和一個(gè)文本編輯框 Button bt_num0,bt_num1,bt_num2,bt_num3,bt_num4,bt_num5,bt_num6,bt_num7,bt_num8,bt_num9,bt_delete,bt_div,bt_mult,bt_minus,bt_plus,bt_equal,bt_dot,bt_clear; private EditText et_calc; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //顯示activity_main.xml定義的用戶界面 initViewAndListener(); //調(diào)用函數(shù)initViewAndListener() } //定義函數(shù)initViewAndListener(),用于與用戶界面程序中的組件建立關(guān)聯(lián),并分別注冊(cè)監(jiān)聽接口 private void initViewAndListener() { bt_num0 = (Button)findViewById(R.id.bt_num0); bt_num0.setOnClickListener(this); bt_num1 = (Button)findViewById(R.id.bt_num1); bt_num1.setOnClickListener(this); bt_num2 =(Button) findViewById(R.id.bt_num2); bt_num2.setOnClickListener(this); bt_num3 = (Button)findViewById(R.id.bt_num3); bt_num3.setOnClickListener(this); bt_num4 = (Button)findViewById(R.id.bt_num4); bt_num4.setOnClickListener(this); bt_num5 = (Button)findViewById(R.id.bt_num5); bt_num5.setOnClickListener(this); bt_num6 = (Button)findViewById(R.id.bt_num6); bt_num6.setOnClickListener(this); bt_num7 = (Button)findViewById(R.id.bt_num7); bt_num7.setOnClickListener(this); bt_num8 = (Button)findViewById(R.id.bt_num8); bt_num8.setOnClickListener(this); bt_num9 = (Button)findViewById(R.id.bt_num9); bt_num9.setOnClickListener(this); bt_delete = (Button)findViewById(R.id.bt_delete); bt_delete.setOnClickListener(this); bt_div = (Button)findViewById(R.id.bt_div); bt_div.setOnClickListener(this); bt_mult = (Button)findViewById(R.id.bt_mult); bt_mult.setOnClickListener(this); bt_minus = (Button)findViewById(R.id.bt_minus); bt_minus.setOnClickListener(this); bt_plus = (Button)findViewById(R.id.bt_plus); bt_plus.setOnClickListener(this); bt_equal = (Button)findViewById(R.id.bt_equal); bt_equal.setOnClickListener(this); et_calc = (EditText)findViewById(R.id.et_calc); bt_dot = (Button)findViewById(R.id.bt_dot); bt_dot.setOnClickListener(this); bt_clear = (Button)findViewById(R.id.bt_clear); bt_clear.setOnClickListener(this); } private boolean lastIsOperator; //記錄當(dāng)前是否進(jìn)行計(jì)算操作 private String lastOperators = ''; //記錄上一次進(jìn)行計(jì)算操作的結(jié)果 private double firstNumber = 0D; //定義并初始化第一次的取值 private double sencondNumber = 0D; //定義并初始化第二次的取值 //onClick()方法,觸發(fā)OnClickListener接口 public void onClick(View v) { String currentText = et_calc.getText().toString(); //獲取當(dāng)前文本編輯框的內(nèi)容 String operatorNumber = ''; //定義并初始化操作數(shù)為”” if (currentText.equals('0')) { //若當(dāng)前輸入數(shù)為0則設(shè)置文本編輯框?yàn)椤薄? et_calc.setText(''); } operatorNumber = et_calc.getText().toString(); //根據(jù)編輯框的內(nèi)容更改操作數(shù)值 if(!lastOperators.equals('')) //判斷上一次操作的數(shù)是否為空,非空則建立索引,隨之修改當(dāng)前操作數(shù) { int index = operatorNumber.lastIndexOf(lastOperators); operatorNumber = operatorNumber.substring(index+1); } //分別獲取按鈕的內(nèi)容至文本編輯框 switch (v.getId()) { case R.id.bt_num0: et_calc.setText(et_calc.getText() + '0'); lastIsOperator = false; break; case R.id.bt_num1: et_calc.setText(et_calc.getText() + '1'); lastIsOperator = false; break; case R.id.bt_num2: et_calc.setText(et_calc.getText() + '2'); lastIsOperator = false; break; case R.id.bt_num3: et_calc.setText(et_calc.getText() + '3'); lastIsOperator = false; break; case R.id.bt_num4: et_calc.setText(et_calc.getText() + '4'); lastIsOperator = false; break; case R.id.bt_num5: et_calc.setText(et_calc.getText() + '5'); lastIsOperator = false; break; case R.id.bt_num6: et_calc.setText(et_calc.getText() + '6'); lastIsOperator = false; break; case R.id.bt_num7: et_calc.setText(et_calc.getText() + '7'); lastIsOperator = false; break; case R.id.bt_num8: et_calc.setText(et_calc.getText() + '8'); lastIsOperator = false; break; case R.id.bt_num9: et_calc.setText(et_calc.getText() + '9'); lastIsOperator = false; break; case R.id.bt_dot: et_calc.setText(et_calc.getText() + '.'); lastIsOperator = false; break; //歸零按鈕,將當(dāng)前操作數(shù)直接清零 case R.id.bt_clear: et_calc.setText(''); lastIsOperator = false; firstNumber=0D; sencondNumber=0D; lastOperators='='; break; //清除按鈕,若當(dāng)前文本編輯框內(nèi)容為空,點(diǎn)擊一次則刪除一個(gè)字符串 case R.id.bt_delete: if (TextUtils.isEmpty(et_calc.getText())) { return; } lastIsOperator = false; et_calc.setText(currentText.substring(0, currentText.length() - 1).length() > 0 ? currentText.substring(0, currentText.length() - 1) : '0'); break; //計(jì)算按鈕,若當(dāng)前內(nèi)容非空、或者以及上一次有操作記錄且記錄不是”=”的情況下,將當(dāng)前的操作記錄設(shè)置為+、-、*、/、= case R.id.bt_div: if ((TextUtils.isEmpty(et_calc.getText()) || lastIsOperator) && !lastOperators.equals('=')) { return; } opratorCalc(operatorNumber,'÷'); lastIsOperator = true; et_calc.setText(et_calc.getText() + '÷'); lastOperators = '÷'; break; case R.id.bt_mult: if ((TextUtils.isEmpty(et_calc.getText()) || lastIsOperator) && !lastOperators.equals('=')) { return; } opratorCalc(operatorNumber,'*'); lastIsOperator = true; et_calc.setText(et_calc.getText() + '*'); lastOperators = '*'; break; case R.id.bt_minus: if ((TextUtils.isEmpty(et_calc.getText()) || lastIsOperator) && !lastOperators.equals('=')) { return; } opratorCalc(operatorNumber,'-'); lastIsOperator = true; et_calc.setText(et_calc.getText() + '-'); lastOperators = '-'; break; case R.id.bt_plus: if ((TextUtils.isEmpty(et_calc.getText()) || lastIsOperator) && !lastOperators.equals('=')) { return; } opratorCalc(operatorNumber,'+'); lastIsOperator = true; et_calc.setText(et_calc.getText() + '+'); lastOperators = '+'; break; case R.id.bt_equal: double result = 0D; if(TextUtils.isEmpty(lastOperators)) { return; } opratorResult(operatorNumber); sencondNumber = 0D; lastOperators ='='; lastIsOperator = true; et_calc.setText(et_calc.getText() + 'n=' + String.valueOf(firstNumber)); break; } } //運(yùn)算函數(shù),按具體操作進(jìn)行+、-、*、/的運(yùn)算 private void operate(String operatorNumber) { if(sencondNumber != 0D) //計(jì)算情況一:第二次輸入的數(shù)不為0 { if(lastOperators.equals('÷')) { sencondNumber = sencondNumber / Double.parseDouble(operatorNumber); firstNumber = firstNumber / sencondNumber; } else if(lastOperators.equals('*')) { sencondNumber = sencondNumber * Double.parseDouble(operatorNumber); firstNumber = firstNumber * sencondNumber; } else if(lastOperators.equals('+')) { sencondNumber = Double.parseDouble(operatorNumber); firstNumber = firstNumber + sencondNumber; } else if(lastOperators.equals('-')) { sencondNumber = Double.parseDouble(operatorNumber); firstNumber = firstNumber - sencondNumber; } } Else //計(jì)算情況二:第二次輸入的數(shù)為0 { if(lastOperators.equals('÷')) { firstNumber = firstNumber / Double.parseDouble(operatorNumber); } else if(lastOperators.equals('*')) { firstNumber = firstNumber * Double.parseDouble(operatorNumber); } else if(lastOperators.equals('+')) { firstNumber = firstNumber + Double.parseDouble(operatorNumber); } else if(lastOperators.equals('-')) { firstNumber= firstNumber - Double.parseDouble(operatorNumber); } } } //分別返回計(jì)算結(jié)果public void opratorResult(String operatorNumber) { operate(operatorNumber); }//按當(dāng)前計(jì)算結(jié)果進(jìn)行下一次的數(shù)據(jù)輸入及計(jì)算 public void opratorCalc(String operatorNumber,String currentOprator) { if(TextUtils.isEmpty(lastOperators)) { firstNumber = Double.parseDouble(operatorNumber); return; } if(lastOperators.equals(currentOprator)) { if(lastOperators.equals('÷')) { firstNumber = firstNumber / Double.parseDouble(operatorNumber); } else if(lastOperators.equals('*')) { firstNumber = firstNumber * Double.parseDouble(operatorNumber); } else if(lastOperators.equals('+')) { firstNumber = firstNumber + Double.parseDouble(operatorNumber); } else if(lastOperators.equals('-')) { firstNumber = firstNumber - Double.parseDouble(operatorNumber); } return; } operate(operatorNumber); } }

布局文件activity_main.xml

<?xml version='1.0' encoding='utf-8'?><GridLayout xmlns:android='http://schemas.android.com/apk/res/android' xmlns:app='http://schemas.android.com/apk/res-auto' xmlns:tools='http://schemas.android.com/tools' android:layout_width='match_parent' android:layout_height='wrap_content' android:columnCount='4' //設(shè)置了一個(gè)4列6行的網(wǎng)格 android:rowCount='6' tools:context='.MainActivity'> <EditText android: android:layout_width='match_parent' android:layout_height='wrap_content' android:layout_columnSpan='4' //該組件占據(jù)4列的位置 android:layout_marginLeft='4px' android:gravity='left'android:layout_row='0' android:background='#eee' android:textSize='50dip'/> <Button android: android:layout_column='3' android:layout_row='1' android:text='清除' android:textSize='26sp'/> <Button android: android:layout_column='0' android:layout_row='1' android:text='歸零' android:textSize='26sp'/> <Button android: android:layout_column='0' android:layout_row='2' android:text='1' android:textSize='26sp'/> <Button android: android:layout_column='1' android:layout_row='2' android:text='2' android:textSize='26sp'/> <Button android: android:layout_column='2' android:layout_row='2' android:text='3' android:textSize='26sp'/> <Button android: android:layout_column='3' android:layout_row='2' android:text='+' android:textSize='26sp'/> <Button android: android:layout_column='0' android:layout_row='3' android:text='4'android:textSize='26sp' /> <Button android: android:layout_column='1' android:layout_row='3' android:text='5' android:textSize='26sp'/> <Button android: android:layout_column='2' android:layout_row='3' android:text='6' android:textSize='26sp'/> <Button android: android:layout_column='3' android:layout_row='3' android:text='-'android:textSize='26sp' /> <Button android: android:layout_column='0' android:layout_row='4' android:text='7' android:textSize='26sp'/> <Button android: android:layout_column='1' android:layout_row='4' android:text='8' android:textSize='26sp'/> <Button android: android:layout_column='2' android:layout_row='4' android:text='9'android:textSize='26sp' /> <Button android: android:layout_column='3' android:layout_row='4' android:text='*' android:textSize='26sp' /> <Button android: android:layout_column='0' android:layout_row='5' android:text='.'android:textSize='26sp' /> <Button android: android:layout_column='1' android:layout_row='5' android:text='0'android:textSize='26sp' /> <Button android: android:layout_column='2' android:layout_row='5' android:text='='android:textSize='26sp' /> <Button android: android:layout_column='3' android:layout_row='5' android:text='/'android:textSize='26sp' /></GridLayout>

關(guān)于計(jì)算器的精彩文章請(qǐng)查看《計(jì)算器專題》 ,更多精彩等你來發(fā)現(xiàn)!

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Android
相關(guān)文章:
主站蜘蛛池模板: 奇酷教育-Python培训|UI培训|WEB大前端培训|Unity3D培训|HTML5培训|人工智能培训|JAVA开发的教育品牌 | 卡诺亚轻高定官网_卧室系统_整家定制_定制家居_高端定制_全屋定制加盟_定制家具加盟_定制衣柜加盟 | 汽液过滤网厂家_安平县银锐丝网有限公司 | 钢格栅板_钢格板网_格栅板-做专业的热镀锌钢格栅板厂家-安平县迎瑞丝网制造有限公司 | 无尘烘箱_洁净烤箱_真空无氧烤箱_半导体烤箱_电子防潮柜-深圳市怡和兴机电 | 河南mpp电力管_mpp电力管生产厂家_mpp电力电缆保护管价格 - 河南晨翀实业 | 武汉刮刮奖_刮刮卡印刷厂_为企业提供门票印刷_武汉合格证印刷_现金劵代金券印刷制作 - 武汉泽雅印刷有限公司 | 章丘丰源机械有限公司 - 三叶罗茨风机,罗茨鼓风机,罗茨风机 | hdpe土工膜-防渗膜-复合土工膜-长丝土工布价格-厂家直销「恒阳新材料」-山东恒阳新材料有限公司 ETFE膜结构_PTFE膜结构_空间钢结构_膜结构_张拉膜_浙江萬豪空间结构集团有限公司 | 丽陂特官网_手机信号屏蔽器_Wifi信号干扰器厂家_学校考场工厂会议室屏蔽仪 | 自动售货机_无人售货机_专业的自动售货机运营商_免费投放售货机-广州富宏主官网 | 纸布|钩编布|钩针布|纸草布-莱州佳源工艺纸布厂 | 粘弹体防腐胶带,聚丙烯防腐胶带-全民塑胶| 模切之家-专注服务模切行业的B2B平台! | 锂电混合机-新能源混合机-正极材料混料机-高镍,三元材料混料机-负极,包覆混合机-贝尔专业混合混料搅拌机械系统设备厂家 | 鲁尔圆锥接头多功能测试仪-留置针测试仪-上海威夏环保科技有限公司 | 邢台人才网_邢台招聘网_邢台123招聘【智达人才网】 | 江西自考网-江西自学考试网| 众品地板网-地板品牌招商_地板装修设计_地板门户的首选网络媒体。 | 不锈钢散热器,冷却翅片管散热器厂家-无锡市烨晟化工装备科技有限公司 | 跨境物流_美国卡派_中大件运输_尾程派送_海外仓一件代发 - 广州环至美供应链平台 | 安平县鑫川金属丝网制品有限公司,防风抑尘网,单峰防风抑尘,不锈钢防风抑尘网,铝板防风抑尘网,镀铝锌防风抑尘网 | 广东燎了网络科技有限公司官网-网站建设-珠海网络推广-高端营销型外贸网站建设-珠海专业h5建站公司「了了网」 | 制样机-密封锤式破碎机-粉碎机-智能马弗炉-南昌科鑫制样 | 隔离变压器-伺服变压器--输入输出电抗器-深圳市德而沃电气有限公司 | 庭院灯_太阳能景观灯_草坪灯厂家_仿古壁灯-重庆恒投科技 | 企业彩铃制作_移动、联通、电信集团彩铃上传开通_彩铃定制_商务彩铃管理平台-集团彩铃网 | 环保袋,无纺布袋,无纺布打孔袋,保温袋,环保袋定制,环保袋厂家,环雅包装-十七年环保袋定制厂家 | 液晶拼接屏厂家_拼接屏品牌_拼接屏价格_监控大屏—北京维康 | 定硫仪,量热仪,工业分析仪,马弗炉,煤炭化验设备厂家,煤质化验仪器,焦炭化验设备鹤壁大德煤质工业分析仪,氟氯测定仪 | 无菌实验室规划装修设计-一体化实验室承包-北京洁净净化工程建设施工-北京航天科恩实验室装备工程技术有限公司 | 深圳昂为官网-气体分析仪,沼气分析仪,动态配气仪,气体传感器厂家 | 细沙回收机-尾矿干排脱水筛设备-泥石分离机-建筑垃圾分拣机厂家-青州冠诚重工机械有限公司 | 耳模扫描仪-定制耳机设计软件-DLP打印机-asiga打印机-fitshape「飞特西普」 | 玻璃钢板-玻璃钢防腐瓦-玻璃钢材料-广东壹诺 | 仿古建筑设计-仿古建筑施工-仿古建筑公司-汉匠古建筑设计院 | 正压密封性测试仪-静态发色仪-导丝头柔软性测试仪-济南恒品机电技术有限公司 | 干培两用箱-细菌恒温培养箱-菲斯福仪器 | 储气罐,真空罐,缓冲罐,隔膜气压罐厂家批发价格,空压机储气罐规格型号-上海申容压力容器集团有限公司 | 北京翻译公司-专业合同翻译-医学标书翻译收费标准-慕迪灵 | Safety light curtain|Belt Sway Switches|Pull Rope Switch|ultrasonic flaw detector-Shandong Zhuoxin Machinery Co., Ltd |