使用Android 实现计算器功能

article/2025/9/19 9:51:29

使用android实现简易的计算器的功能
1、给计算机布局: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="match_parent"tools:context=".MainActivity"android:orientation="vertical"><GridLayout
        android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_gravity="top"><!--输入的文本框--><EditText
            android:id="@+id/main_et_result"android:layout_width="match_parent"android:layout_height="100dp"android:hint="请输入数字"/></GridLayout><GridLayout
        android:layout_width="match_parent"android:layout_height="wrap_content"android:rowCount="5"android:columnCount="4"android:layout_gravity="center|top"><Button
            android:id="@+id/main_btn1"android:layout_width="90dp"android:layout_height="60dp"android:text="1"/><Button
            android:id="@+id/main_btn2"android:layout_width="90dp"android:layout_height="60dp"android:text="2"/><Button
            android:id="@+id/main_btn3"android:layout_width="90dp"android:layout_height="60dp"android:text="3"/><Button
            android:id="@+id/main_btnc"android:layout_width="90dp"android:layout_height="60dp"android:text="/"/><Button
            android:id="@+id/main_btn4"android:layout_width="90dp"android:layout_height="60dp"android:text="4"/><Button
            android:id="@+id/main_btn5"android:layout_width="90dp"android:layout_height="60dp"android:text="5"/><Button
            android:id="@+id/main_btn6"android:layout_width="90dp"android:layout_height="60dp"android:text="6"/><Button
            android:id="@+id/main_btnx"android:layout_width="90dp"android:layout_height="60dp"android:text="*"/><Button
            android:id="@+id/main_btn7"android:layout_width="90dp"android:layout_height="60dp"android:text="7"/><Button
            android:id="@+id/main_btn8"android:layout_width="90dp"android:layout_height="60dp"android:text="8"/><Button
            android:id="@+id/main_btn9"android:layout_width="90dp"android:layout_height="60dp"android:text="9"/><Button
            android:id="@+id/main_btndel"android:layout_width="90dp"android:layout_height="60dp"android:text="del"/><Button
            android:id="@+id/main_btnj"android:layout_width="90dp"android:layout_height="63dp"android:text="-" /><Button
            android:id="@+id/main_btn0"android:layout_width="90dp"android:layout_height="60dp"android:layout_columnSpan="1"android:layout_gravity="fill_horizontal"android:text="0" /><Button
            android:id="@+id/main_btnd"android:layout_width="90dp"android:layout_height="60dp"android:text="."/><Button
            android:id="@+id/main_btn1a"android:layout_width="90dp"android:layout_height="71dp"android:layout_rowSpan="2"android:layout_gravity="fill_vertical"android:text="+" /><Button
            android:id="@+id/main_btn1d"android:layout_width="180dp"android:layout_height="60dp"android:layout_columnSpan="3"android:layout_gravity="fill_horizontal"android:text="="/><Space /></GridLayout></GridLayout>

说明:在这里我给编辑框(EditText) 设了一个id,用来通过id处理结果集;给每个按钮(Button)也设了一个id ,目的是通过id去获取它自己的值。

*合并行:layout_columnSpan*, 合并列 :layout_rowSpan

效果图:
这里写图片描述

说明:我这里运用的是一个大的GridLayout布局,里面嵌套两个小的GridLayout布局,分别存放输入框【编辑框(EditText)】和按钮(Button),
EditText和TextView非常相似,它与TextView共用了绝大总分XML属性和文法,
二者最大区别在于:EditText可以接受用户输入。

2、实现的方法:MainActivtiy.java:

package com.example.t212_a05;import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.text.Editable;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;public class MainActivity extends AppCompatActivity implements View.OnClickListener {//    结果集private EditText editText;//数字1-9private Button main_btn1;private Button main_btn2;private Button main_btn3;private Button main_btn4;private Button main_btn5;private Button main_btn6;private Button main_btn7;private Button main_btn8;private Button main_btn9;private  Button main_btn0;//运算符private  Button main_btn1a  ;// +private  Button main_btnj;  // -private  Button main_btnx;  // *private  Button main_btnc;  // /private  Button main_btnd;  //小数点private  Button main_btn1d;  //=//清除private  Button main_btndel;boolean clear_flag;//清空标识@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//数字1-9View main_btn1 = findViewById(R.id.main_btn1);View main_btn2 = findViewById(R.id.main_btn2);View main_btn3= findViewById(R.id.main_btn3);View main_btn4 = findViewById(R.id.main_btn4);View main_btn5 = findViewById(R.id.main_btn5);View main_btn6 = findViewById(R.id.main_btn6);View main_btn7 = findViewById(R.id.main_btn7);View main_btn8 = findViewById(R.id.main_btn8);View main_btn9 = findViewById(R.id.main_btn9);View main_btn0 = findViewById(R.id.main_btn0);//运算符View main_btn1a = findViewById(R.id.main_btn1a);// +View main_btnj = findViewById(R.id.main_btnj);// -View main_btnx = findViewById(R.id.main_btnx);// *View main_btnc = findViewById(R.id.main_btnc); // /View main_btnd = findViewById(R.id.main_btnd);//小数点View main_btn1d = findViewById(R.id.main_btn1d);//=View main_btndel = findViewById(R.id.main_btndel);//清空editText = (EditText) findViewById(R.id.main_et_result);//结果集//添加点击事件main_btn0.setOnClickListener(this);main_btn1.setOnClickListener(this);main_btn2.setOnClickListener(this);main_btn3.setOnClickListener(this);main_btn4.setOnClickListener(this);main_btn5.setOnClickListener(this);main_btn6.setOnClickListener(this);main_btn7.setOnClickListener(this);main_btn8.setOnClickListener(this);main_btn9.setOnClickListener(this);main_btnd.setOnClickListener(this);main_btndel.setOnClickListener(this);main_btn1a.setOnClickListener(this);main_btnj.setOnClickListener(this);main_btnx.setOnClickListener(this);main_btnc.setOnClickListener(this);main_btn1d.setOnClickListener(this);}//读取每个按钮的点击的内容@Overridepublic void onClick(View view) {//获取文本内容String input = editText.getText().toString();switch (view.getId()){case R.id.main_btn0:case R.id.main_btn1:case R.id.main_btn2:case R.id.main_btn3:case R.id.main_btn4:case R.id.main_btn5:case R.id.main_btn6:case R.id.main_btn7:case R.id.main_btn8:case R.id.main_btn9:case R.id.main_btnd:if(clear_flag){clear_flag = false;editText.setText("");//赋值为空}editText.setText(input + ((Button)view).getText());//结果集就为本身break;case R.id.main_btn1a:case R.id.main_btnj:case R.id.main_btnx:case R.id.main_btnc:if(clear_flag){clear_flag = false;input = "";editText.setText("");}editText.setText(input + " " + ((Button)view).getText() + " ");break;case R.id.main_btndel:if(clear_flag){clear_flag = false;input = "";editText.setText("");}else if(input != null || !input.equals("")) {//如果获取到的内容为空editText.setText(input.substring(0, input.length() - 1));//结果集为空}break;case R.id.main_btn1d://运算结果  =getResult();//调用处理结果集的方法break;}}//运算结果的方法private void getResult(){String exp = editText.getText().toString();//获取文本框的内容if(exp==null||exp.equals("")){return;}if(!exp.contains(" ")){return;}if(clear_flag){clear_flag = false;return;}clear_flag = true;double result = 0;//进行截取//运算符前的数字String s1 = exp.substring(0,exp.indexOf(" "));//运算符String op = exp.substring(exp.indexOf(" ")+1,exp.indexOf(" ")+2);//运算符后的数字String s2 = exp.substring(exp.indexOf(" ")+3);if(!s1.equals("")&&!s2.equals("")) {//如果包含小数点的运算double d1 = Double.parseDouble(s1);//则数字都是double类型double d2 = Double.parseDouble(s2);if (op.equals("+")) {//如果是 +result = d1 + d2;} else if (op.equals("-")) {result = d1 - d2;} else if (op.equals("*")) {result = d1 * d2;} else if (op.equals("/")) {if (d2 == 0) { //如果被除数是0result = 0; //则结果是0}else {//否则执行正常是除法运算result = d1 / d2;}}if (!s1.contains(".") && !s2.contains(".") && !op.equals("/")) {//如果是整数类型int r = (int) result; //都是整形editText.setText(r + "");} else{editText.setText(result + "");}}else if(!s1.equals("") && s2.equals("")){//如果是只输入运算符前的数editText.setText(exp);//直接返回当前文本框的内容}else if(s1.equals("") && !s2.equals("")){//如果是只输入运算符后面的数double d2 = Double.parseDouble(s2);//运算符前没有输入数字if (op.equals("+")) {result = 0 + d2;} else if (op.equals("-")) {result = 0 - d2;} else if (op.equals("*")) {result = 0;} else if (op.equals("/")) {result = 0;}if (!s1.contains(".") && !s2.contains(".")) {int r = (int) result;editText.setText(r + "");} else{editText.setText(result + "");}}else {editText.setText("");}}
}

说明: 在写方法的时候,让MainActivtiy实现View.OnClickListener 这个接口,在实现点击事件的时候,就可以直接用 this ,例如: main_btn0.setOnClickListener(this);

运行结果:
这里写图片描述

这里写图片描述

样式比较丑,凑合着吧,功能实现出来就好!
Android 实现计算器功能,只是简单的实现。


http://chatgpt.dhexx.cn/article/YXOiMH9j.shtml

相关文章

android studio实现计算器界面

实现计算器界面 新建项目1、打开Android Studio2、创建项目3、设置项目基本信息4、等待项目文件加载 打开界面文件1、设置线性布局2、增加子容器3、添加内容 计算器界面完成效果 新建项目 1、打开Android Studio 2、创建项目 点击右上角【New Project】选择“Empty Activity”…

Android Studio实现计算器功能

实验一&#xff1a;做一个简单的计算器 1.创建布局文件Activity_main.xml 代码如下&#xff1a; <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"android:orient…

Android Studio入门教程(计算器)

一、建立开发环境 1、AS简介 Android Studio 是Google开发的一款面向Android开发者的IDE&#xff0c;支持Windows、Mac、Linux等操作系统&#xff0c;基于流行的开发语言java集成开发环境IntelliJ搭建而成的&#xff0c;类似Eclipse ADT。该IDE在2003年5月的Google I/O开发者…

Android开发——简单计算器实现

计算器项目&#xff0c;要求实现加、减、乘、除、求倒数、求平方根等简单运算。 真机调试结果如下图&#xff1a; 布局文件&#xff1a;main_activity.xml <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://sc…

Android Studio简易计算器

目录 第一步&#xff0c;创建新项目 第二步&#xff0c;设计UI 第三步&#xff0c;实现计算逻辑 第四步&#xff0c;测试应用程序 随着移动互联网的普及&#xff0c;手机应用程序已经成为人们生活中不可或缺的一部分。计算器是一类被广泛使用的应用程序之一&#xff0c;因此…

十五、吉布斯采样的理解

由于本人喜欢在纸上手推原理&#xff0c;所以附上照片&#xff0c;欢迎提出建议

MCMC、吉布斯采样

学习视频&#xff1a;B站白板推导 学习和代码教程&#xff1a; Li Hang code 知乎&#xff08;和上面内容一模一样&#xff09; &#xff08;权当参考&#xff09; 关于上面代码中&#xff0c;吉布斯采样二维正态分布的理解&#xff1a; Σ的意思是协方差矩阵&#xff0c;在…

LDA----吉布斯采样

w~Mult(w|p) 这里可以引入一个新的概念:概率图模型,来画出这种模型。如图 3-1所示,图中被涂色的 表示可观测变量,方框表示重复抽取的次数, 表示一篇文档中总共 个单词, 表示M篇文档。也就是说,重复抽取 篇文档,每个文档抽取 个单词,这样的生成模型生成了整个语料(corpus)。 总结…

LDA-模型的实现-----吉布斯采样

https://www.cnblogs.com/nlp-yekai/p/3858705.html?utm_sourcetuicool&utm_mediumreferral 算法 LDA Collapsed Gibbs Sampling 输入&#xff1a;文档集(分词后)&#xff0c;K(主题数)&#xff0c;α&#xff0c;β&#xff0c;iter_number(迭代次数) 输出&#xff1a;…

R语言实现MCMC中的Metropolis–Hastings算法与吉布斯采样

创建测试数据 第一步&#xff0c;我们创建一些测试数据&#xff0c;用来拟合我们的模型。我们假设预测变量和因变量之间存在线性关系&#xff0c;所以我们用线性模型并添加一些噪音。 trueA <- 5trueB <- 0trueSd <- 10sampleSize <- 31# 创建独立的x值x <- (…

马尔科夫过程与吉布斯采样

随机模拟(或者统计模拟)方法有一个很酷的别名是蒙特卡罗方法(Monte Carlo Simulation)。这个方法的发展始于20世纪40年代&#xff0c;和原子弹制造的曼哈顿计划密切相关&#xff0c;当时的几个大牛&#xff0c;包括乌拉姆、冯.诺依曼、费米、费曼、Nicholas Metropolis&#xf…

吉布斯采样的简单描述

几个可以学习gibbs sampling的方法1&#xff0c;读Bishop的Pattern Recognition and Machine Learning&#xff0c;讲的很清楚&#xff0c;但是我记得好像没有例子。2&#xff0c;读artificial Intelligence&#xff0c;2、3版&#xff0c;都有。但是我没读过。3&#xff0c;最…

【ML】线性回归的吉布斯采样(Gibbs Sampling)实现(python)

导航 Bayesian Linear RegressionGibbs SamplingDerving a Gibbs samplerUpdate for β 0 \beta_0 β0​Update for β 1 \beta_1 β1​Update for τ \tau τSynthetic dataGibbs sampler code downlaodReferences Bayesian Linear Regression 考虑只有一个自变量(indepen…

【机器学习】主题建模+隐狄利克雷分配模型(LDA)+吉布斯采样

【主题建模】 大数据时代&#xff0c;面对海量的数据&#xff0c;如果能知道它的主题是什么&#xff0c;从数据压缩的角度来看&#xff0c;我们可以通过很少量的主题来管理很大亮的文档数据集合&#xff0c;从而实现一个比较简洁的操作和管理文档集合的目的&#xff1b;除此之外…

【人工智能】对贝叶斯网络进行吉布斯采样

问题 现要求通过吉布斯采样方法&#xff0c;利用该网络进行概率推理&#xff08;计算 P(RT|SF, WT)、P2(CF|WT)的概率值&#xff09;。 原理 吉布斯采样的核心思想为一维一维地进行采样&#xff0c;采某一个维度的时候固定其他的维度&#xff0c;在本次实验中&#xff0c;假…

matlab bnt工具箱吉布斯采样,吉布斯采样——原理及matlab实现

原文来自:https://victorfang.wordpress.com/2014/04/29/mcmc-the-gibbs-sampler-simple-example-w-matlab-code/ 【注】评论区有同学指出译文理论编码有误,请参考更官方的文献,个人当时仅验证过红色字体部分理论与维基百科中二位随机变量吉布斯采样的结果是否对应,其余部分…

【LDA】吉布斯采样

吉布斯采样是用条件概率得到联合概率分布。 其实是得到我们想要东西的近似解 目录 1 蒙特卡罗2 马尔科夫链3.MCMC采样4 MH采样5 吉布斯采样 1 蒙特卡罗 蒙特卡洛方法是为了解决一些不太好求解的求和或者积分问题。 其实就是一个近似方法&#xff0c;通过采样的多个样本代替原…

机器学习笔记之马尔可夫链蒙特卡洛方法(四)吉布斯采样

机器学习笔记之马尔可夫链蒙特卡洛方法——吉布斯采样 引言回顾&#xff1a;MH采样算法基于马尔可夫链的采样方式细致平衡原则与接收率 MH采样算法的弊端吉布斯采样方法吉布斯采样的采样过程吉布斯采样的推导过程吉布斯采样的代码实现 引言 上一节介绍了将马尔可夫链与蒙特卡洛…

三步完成吉布斯采样Gibbs sampling

吉布斯采样的具体执行过程只需要三个步骤&#xff0c;非常非常简单好理解&#xff0c;其它相关的背景知识能帮助加深理解。 一、Preliminaries Monte Carlo methods 它是很宽泛的一类计算方法&#xff0c;依赖重复的随机采样去获得数值结果。a broad class of computational a…

MCMC笔记:吉布斯采样(Gibbs)

1 介绍 吉布斯采样是一种特殊的MH采样 MCMC笔记Metropilis-Hastings算法&#xff08;MH算法&#xff09;_UQI-LIUWJ的博客-CSDN博客 此时我们要采样的分布是一个高维的情况 吉布斯采样的思想就是一维一维地进行采样&#xff0c;采某一个维度的时候固定其他的维度 吉布斯采…