Android--简易计算器实现

以下实验是利用逍遥模拟器搭建的简易计算器页面

对现有功能说明:可实现双目运算和开方单目运算;

待改进:需要实现表达式的计算;以及负数参与运算;

//XML代码<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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:id="@+id/main"android:layout_width="match_parent"android:layout_height="match_parent"tools:context=".MainActivity">//线性布局--方向垂直//第一行是标题“计算器”TextView//第二行是编辑框“EditText”//线性布局//放置计算器的按钮<LinearLayoutandroid:id="@+id/linearLayout"android:layout_width="0dp"android:layout_height="wrap_content"android:orientation="vertical"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent"><TextViewandroid:id="@+id/textView"android:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="center"android:text="@string/calculator"android:textSize="20sp"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent" /><TextViewandroid:id="@+id/textView2"android:layout_width="match_parent"android:layout_height="wrap_content"android:gravity="end"android:text="@string/zero"android:textSize="30sp"app:layout_constraintEnd_toEndOf="parent"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="@+id/textView" /></LinearLayout><LinearLayoutandroid:id="@+id/linearLayout2"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="100dp"android:gravity="center_horizontal"android:orientation="horizontal"app:layout_constraintStart_toStartOf="@+id/linearLayout"app:layout_constraintTop_toTopOf="parent"><!--        app:layout_constraintTop_toBottomOf="@+id/et_input">--><!--       C按钮--><Buttonandroid:id="@+id/clr"android:layout_width="80dp"android:layout_height="60dp"android:paddingRight="15sp"android:paddingBottom="15sp"android:text="C"android:textSize="30sp"/><!--        删除CE按钮--><Buttonandroid:id="@+id/del"android:layout_width="80dp"android:layout_height="60dp"android:paddingRight="15sp"android:paddingBottom="15sp"android:text="CE"android:textSize="30sp"/><!--        开方运算按钮--><Buttonandroid:id="@+id/sqrt"android:layout_width="80dp"android:layout_height="60dp"android:paddingRight="15sp"android:paddingBottom="15sp"android:text="√"android:textSize="30sp"/><!--        加运算+按钮--><Buttonandroid:id="@+id/add"android:layout_width="80dp"android:layout_height="60dp"android:paddingRight="15sp"android:paddingBottom="15sp"android:text="+"android:textSize="30sp"/></LinearLayout><LinearLayoutandroid:id="@+id/linearLayout3"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="160dp"android:gravity="center_horizontal"android:orientation="horizontal"app:layout_constraintStart_toStartOf="@+id/linearLayout"app:layout_constraintTop_toTopOf="parent"><!--        数字1--><Buttonandroid:id="@+id/btn_1"android:layout_width="80dp"android:layout_height="60dp"android:paddingRight="15sp"android:paddingBottom="15sp"android:text="1"android:textSize="30sp"/><!--        数字2--><Buttonandroid:id="@+id/btn_2"android:layout_width="80dp"android:layout_height="60dp"android:paddingRight="15sp"android:paddingBottom="15sp"android:text="2"android:textSize="30sp"/><!--        数字3--><Buttonandroid:id="@+id/btn_3"android:layout_width="80dp"android:layout_height="60dp"android:paddingRight="15sp"android:paddingBottom="15sp"android:text="3"android:textSize="30sp"/><!--        减运算-按钮--><Buttonandroid:id="@+id/minus"android:layout_width="80dp"android:layout_height="60dp"android:paddingRight="15sp"android:paddingBottom="15sp"android:text="-"android:textSize="30sp"/></LinearLayout><LinearLayoutandroid:id="@+id/linearLayout4"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="220dp"android:gravity="center_horizontal"android:orientation="horizontal"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent"><!--        数字4--><Buttonandroid:id="@+id/btn_4"android:layout_width="80dp"android:layout_height="60dp"android:paddingRight="15sp"android:paddingBottom="15sp"android:text="4"android:textSize="30sp"/><!--        数字5--><Buttonandroid:id="@+id/btn_5"android:layout_width="80dp"android:layout_height="60dp"android:paddingRight="15sp"android:paddingBottom="15sp"android:text="5"android:textSize="30sp"/><!--        数字6--><Buttonandroid:id="@+id/btn_6"android:layout_width="80dp"android:layout_height="60dp"android:paddingRight="15sp"android:paddingBottom="15sp"android:text="6"android:textSize="30sp"/><!--        乘运算*按钮--><Buttonandroid:id="@+id/mul"android:layout_width="80dp"android:layout_height="60dp"android:paddingRight="15sp"android:paddingBottom="15sp"android:text="*"android:textSize="30sp"/></LinearLayout><LinearLayoutandroid:id="@+id/linearLayout5"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="280dp"android:gravity="center_horizontal"android:orientation="horizontal"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent"><!--        数字7--><Buttonandroid:id="@+id/btn_7"android:layout_width="80dp"android:layout_height="60dp"android:paddingRight="15sp"android:paddingBottom="15sp"android:text="7"android:textSize="30sp"/><!--        数字8--><Buttonandroid:id="@+id/btn_8"android:layout_width="80dp"android:layout_height="60dp"android:paddingRight="15sp"android:paddingBottom="15sp"android:text="8"android:textSize="30sp"/><!--        数字9--><Buttonandroid:id="@+id/btn_9"android:layout_width="80dp"android:layout_height="60dp"android:paddingRight="15sp"android:paddingBottom="15sp"android:text="9"android:textSize="30sp"/><!--        除/运算--><Buttonandroid:id="@+id/div"android:layout_width="80dp"android:layout_height="60dp"android:paddingRight="15sp"android:paddingBottom="15sp"android:text="/"android:textSize="30sp"/></LinearLayout><LinearLayoutandroid:id="@+id/linearLayout6"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_marginTop="340dp"android:gravity="center_horizontal"android:orientation="horizontal"app:layout_constraintStart_toStartOf="parent"app:layout_constraintTop_toTopOf="parent"><!--    小数点--><Buttonandroid:id="@+id/dot"android:layout_width="80dp"android:layout_height="60dp"android:paddingRight="15sp"android:paddingBottom="15sp"android:text="."android:textSize="30sp"/><!--        数字0--><Buttonandroid:id="@+id/btn_0"android:layout_width="80dp"android:layout_height="60dp"android:paddingRight="15sp"android:paddingBottom="15sp"android:text="0"android:textSize="30sp"/><!--        负数取值--><Buttonandroid:id="@+id/negative"android:layout_width="80dp"android:layout_height="60dp"android:paddingRight="15sp"android:paddingBottom="15sp"android:text="±"android:textSize="30sp"/><!--        等于=按钮--><Buttonandroid:id="@+id/equal"android:layout_width="80dp"android:layout_height="60dp"android:paddingRight="15sp"android:paddingBottom="15sp"android:text="="android:textSize="30sp"/></LinearLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
//MainActivity.javapackage com.example.exp2;import static android.util.Log.println;import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
import androidx.lifecycle.Lifecycle;public class MainActivity extends AppCompatActivity {//数字按钮的idint[] ids = {R.id.btn_0, R.id.btn_1, R.id.btn_2, R.id.btn_3, R.id.btn_4, R.id.btn_5, R.id.btn_6, R.id.btn_7, R.id.btn_8, R.id.btn_9};//Button数组Button[] nums = new Button[10];Button add, minus, mul, div, sqrt, eq, clr, del, dot, negative;//结果栏TextView display;//枚举变量 State--状态自动机enum State {CLEAR, NUM1, NUM2, RESULT};State S = State.CLEAR;  //附初始默认状态值,防止空指针出现导致出现keep stopping问题;double number1, number2;//定义op 判断运算类型int op = -1;View.OnClickListener num_proc = new View.OnClickListener() {@Override//实现多位数字显示public void onClick(View view) {String s;switch (S) {case CLEAR:CLEAR_NUM1();   //数字键相应->变成状态NUM1s = ((TextView) view).getText().toString(); //得到第一个数字按钮文字display.setText(s);  //显示到文本框break;case NUM1:case NUM2:s = display.getText().toString(); //从源结果框取出原内容if (s == "0") {s = ((TextView) view).getText().toString();//如果原文本框是0,显示内容即可} else {s += ((TextView) view).getText().toString(); //加上新添加的内容}display.setText(s);  //重新显示到结果框break;case RESULT:break;default:;}}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//通过id找到对应的控件add = findViewById(R.id.add);minus = findViewById(R.id.minus);mul = findViewById(R.id.mul);div = findViewById(R.id.div);sqrt = findViewById(R.id.sqrt);eq = findViewById(R.id.equal);clr = findViewById(R.id.clr);del = findViewById(R.id.del);dot = findViewById(R.id.dot);negative = findViewById(R.id.negative);display = findViewById(R.id.textView2);    //第二个显示框显示计算结果;for (int i = 0; i < 10; i++) {nums[i] = findViewById(ids[i]);nums[i].setOnClickListener(num_proc);  //给每个数字按键添加监视器;}//dot添加监听器dot.setOnClickListener(num_proc);
//        negative添加监听器
//        negative.setOnClickListener(new View.OnClickListener() {
//                                        @Override
//                                        public void onClick(View view) {
//
//                                        }
//                                    };//clr添加监听器clr.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {to_CLEAR();//State置CLEAR;}});//del后退_添加监听器del.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {String str = display.getText().toString();if ((str.length()) == 1) {display.setText("0");} else {display.setText(str.substring(0, str.length() - 1));}}});//add添加监听器;add.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {switch (S) {case CLEAR:break;case NUM1:NUM1_NUM2();//此时状态是NUM2String temp_1 = display.getText().toString();number1 = Double.valueOf(temp_1);display.append("+");op = 1;break;case NUM2:case RESULT:break;default:;}}});//minus添加监听器;minus.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {switch (S) {case CLEAR:break;case NUM1:NUM1_NUM2();//此时状态是NUM2String temp_1 = display.getText().toString();number1 = Double.valueOf(temp_1);display.append("-");op = 2;break;case NUM2:case RESULT:break;default:;}}});//mul添加监听器;mul.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {switch (S) {case CLEAR:break;case NUM1:NUM1_NUM2();//此时状态是NUM2String temp_1 = display.getText().toString();number1 = Double.valueOf(temp_1);display.append("x");op = 3;break;case NUM2:case RESULT:break;default:;}}});//div添加监听器;div.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {switch (S) {case CLEAR:break;case NUM1:NUM1_NUM2();String temp_1 = display.getText().toString();number1 = Double.valueOf(temp_1);display.append("/");op = 4;break;case NUM2:case RESULT:break;default:;}}});//sqrt添加监听器;sqrt.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {switch (S) {case CLEAR:CLEAR_NUM1();NUM1_NUM2();display.setText("√");op = 5;break;case NUM1:case NUM2:case RESULT:break;default:;}}});//eq添加监视器eq.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {switch (S) {case CLEAR:break;case NUM1:break;case NUM2:NUM2_RESULT();String temp = display.getText().toString();int index;String temp_2;double end = 0;if (op == 1) {index = temp.indexOf("+");temp_2 = temp.substring(index + 1);number2 = Double.valueOf(temp_2);end = number1 + number2;} else if (op == 2) {index = temp.indexOf("-");temp_2 = temp.substring(index + 1);number2 = Double.valueOf(temp_2);end = number1 - number2;} else if (op == 3) {index = temp.indexOf("x");temp_2 = temp.substring(index + 1);number2 = Double.valueOf(temp_2);end = number1 * number2;} else if (op == 4) {index = temp.indexOf("/");temp_2 = temp.substring(index + 1);number2 = Double.valueOf(temp_2);end = number1 / number2;} else if (op == 5) {//  Log.d(TestApp,temp2);index = temp.indexOf("√");temp_2 = temp.substring(index + 1);number2 = Double.valueOf(temp_2);end = Math.sqrt(number2);}if (end == Math.floor(end)) {display.setText(String.valueOf((int) end) + "");} else {display.setText(end + "");}break;case RESULT:break;default:;}}});}void to_CLEAR() {S = State.CLEAR;display.setText("0");}void CLEAR_NUM1() {S = State.NUM1;}void NUM1_NUM2() {S = State.NUM2;}void NUM2_RESULT() {S = State.RESULT;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/883255.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

排序(一)插入排序,希尔排序,选择排序,堆排序,冒泡排序

目录 一.排序 1.插入排序 2.希尔排序 3.选择排序 4.堆排序 5.冒泡排序 二.整体代码 1.Sort.h 2.Sort.c 3.test.c 一.排序 1.插入排序 插入排序基本思想:把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中&#xff0c;直到所有的记录插入完为 止…

ubuntu20.04上使用 Verdaccio 搭建 npm 私有仓库

安装nvm 首先安装必要的工具&#xff1a; apt update apt install curl下载并执行nvm安装脚本&#xff1a; curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.7/install.sh | bash添加环境变量&#xff08;如果安装脚本没有自动添加&#xff09;。编辑 ~/.bash…

mysql建表

作业要求&#xff1a; 根据以下需求完成图书管理系统数据库及表设计&#xff0c;并建库建表&#xff0c;并截图创建表的详细信息(desc 表名),不用添加数据 1. 用户表: 字段: 姓名&#xff0c;用户名&#xff0c;密码&#xff0c;电话&#xff0c;住址&#xff0c;专业及年级…

命名空间std, using namespace std

命名空间std&#xff0c;using namespace std 在标准C以前&#xff0c;都是用#include<iostream.h>这样的写法的&#xff0c;因为要包含进来的头文件名就是iostream.h。标准C引入了名字空间的概念&#xff0c;并把iostream等标准库中的东东封装到了std名字空间中&#x…

系统设计-通用用户权限管理系统

通用用户权限管理系统 一、系统安全二、登录授权三、系统内部安全1. 相关实体1.1 实体关系(ER)2. 菜单权限3. 接口权限3.1 权限获取3.2 接口调用鉴权4. 数据权限四、其他一个没有权限控制的系统,是非常不安全的。 在日常业务运营的系统中台,基本都会存在用户的菜单权限控制,…

【华为路由】OSPF多区域配置

网络拓扑 设备接口地址 设备 端口 IP地址 RTA Loopback 0 1.1.1.1/32 G0/0/0 10.1.1.1/24 RTB Loopback 0 2.2.2.2/32 G0/0/0 10.1.1.2/24 G0/0/1 10.1.2.1/24 RTC Loopback 0 3.3.3.3/32 G0/0/0 10.1.2.2/24 G0/0/1 10.1.3.1/24 RTD Loopback 0 4.4.4…

与ai聊我的代码架构

以包目录结构模块&#xff0c;以*.py脚本收纳模块。 (笔记模板由python脚本于2024年10月25日 18:39:10创建&#xff0c;本篇笔记适合编程基础的coder翻阅) 【学习的细节是欢悦的历程】 Python 官网&#xff1a;https://www.python.org/ Free&#xff1a;大咖免费“圣经”教程《…

在线教育(培训+考试)/企业培训-企业培训平台-企业培训平台系统-企业内部培训系统-在线教育-Java语言开发

介绍 企业培训平台支持企业培训考试全流程&#xff0c;在线学习、在线考试&#xff0c;成熟的企业培训考试解决方案&#xff0c;充分满足企业培训需求。 独立部署&#xff0c;仅内部员工登录使用&#xff0c;稳定、安全、高效&#xff0c;满足企业、政府、教育行业的各种在线学…

STM32-Modbus协议(一文通)

Modbus协议原理 RT-Thread官网开源modbus RT-Thread官方提供 FreeModbus开源。 野火有移植的例程。 QT经常用 libModbus库。 Modbus是什么&#xff1f; Modbus协议&#xff0c;从字面理解它包括Mod和Bus两部分&#xff0c;首先它是一种bus&#xff0c;即总线协议&#xff0c;和…

Maya---骨骼绑定

调节骨骼大小 回车键确认骨骼 FK子集跟父集走 IK子集不跟父集走 前视图中按shift键添加骨骼 清零、删除历史记录&#xff0c;创建新的物体

多元线性回归【正规方程/sklearn】

多元线性回归【正规方程/sklearn】 1. 基本概念1.1 线性回归1.2 一元简单线性回归1.3 最优解1.4 多元线性回归 2. 正规方程求最优解2.1 线性回归的损失函数&#xff08;最小二乘法&#xff09;2.2 推导正规方程2.3 正规方程练习2.4 使用sklearn计算多元线性方程2.5 凸函数 3. 线…

哪款宠物空气净化器噪音低?希喂、美的、安德迈测评分享

今年双11&#xff0c;宠物空气净化器到底应该如何选&#xff1f;在所有的家电品类里&#xff0c;宠物空气净化器算是比较特殊的那个&#xff0c;产品迭代太快&#xff0c;我们把今年双11在售的各大主流品牌的宠物空气净化器统一汇总整理&#xff0c;发现基本一多半都是24年下半…

【Unity 安装教程】

Unity 中国官网地址链接 Unity - 实时内容开发平台 | 3D、2D、VR & AR可视化https://unity.cn/首先我们想要安装Unity之前&#xff0c;需要安装Unity Hub&#xff1a; Unity Hub 是 Unity Technologies 开发的一个集成软件&#xff0c;它为使用 Unity 引擎的开发者提供了一…

使用Angular构建动态Web应用

&#x1f496; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4bb; Gitee主页&#xff1a;瑕疵的gitee主页 &#x1f680; 文章专栏&#xff1a;《热点资讯》 使用Angular构建动态Web应用 1 引言 2 Angular简介 3 安装Angular CLI 4 创建Angular项目 5 设计应用结构 6 创建组件…

Nature Communications|一种3D打印和激光诱导协同策略用于定制功能化器件(3D打印/激光直写/柔性电子/人机交互/柔性电路)

美国密苏里大学机械与航天工程系Jian Lin团队,在《Nature Communications》上发布了一篇题为“Programmed multimaterial assembly by synergized 3D printing and freeform laser induction”的论文。论文内容如下: 一、 摘要 在自然界中,结构和功能材料经常形成程序化的三…

《面向对象系统分析与设计》三级项目

文章目录 一、项目总体要求<设计模式应用>第一次文档要求第二次文档要求 二、示例第一次文档 - 设计原则应用1、题目描述2、设计:(1&#xff09;优化理由陈述(2&#xff09;类图(3)实现代码 第二次文档 - 设计模式应用1、题目描述2、设计:(1) 优化理由陈述(2&#xff09;…

【虚幻引擎UE】UE5 音频共振特效制作

UE5 音频共振特效制作 一、基础准备1.插件准备2.音源准备 二、创建共感NRT解析器和设置1.解析器选择依据2. 创建解析器3. 创建解析器设置&#xff08;和2匹配&#xff09;4.共感NRT解析器设置参数调整5.为共感NRT解析器关联要解析的音频和相应设置 三、蓝图控制1.创建Actor及静…

短剧AI突围战,百度跑偏了

“ 百度短剧的Agent对话功能并不属于颠覆性创新&#xff0c;只是新插件&#xff0c;对短剧行业市场格局影响不大&#xff0c;最多只能算用户痒点。 ” 转载&#xff1a;科技新知 原创 作者丨晓伊 编辑丨蕨影 你是否有过这样的体验&#xff1f; 刷短剧时&#xff0c;因剧情曲…

解决运行jar错误: 缺少 JavaFX 运行时组件, 需要使用该组件来运行此应用程序

报错 众所周知jdk8以上都没有Javafx java -jar target/myyscan-1.0-SNAPSHOT.jar 错误: 缺少 JavaFX 运行时组件, 需要使用该组件来运行此应用程序解决 https://gluonhq.com/products/javafx/ 去下载/javafx/到本地&#xff0c;选择自己的型号 然后记得指定路径 java --m…

TPLCM柔性屏自动化贴合应用

在当前的显示屏制造领域&#xff0c;TP&LCM贴合技术是推动产品升级和满足市场需求的关键环节。随着技术的不断进步&#xff0c;全贴合技术因其卓越的显示效果和用户体验&#xff0c;逐渐成为中高端产品的标配。然而&#xff0c;这一技术的高精度要求和复杂工艺也带来了诸多…