【Android学习】简易计算器的实现

 1.项目基础目录

新增dimens.xml 用于控制全部按钮的尺寸。图片资源放在drawable中。

 另外 themes.xml中原来的

    <style name="Theme.Learn" parent="Theme.MaterialComponents.DayNight.DarkActionBar">

 变为了,加上后可针对button中增加图片和文字修改背景。

    <style name="Theme.Learn" parent="Theme.MaterialComponents.DayNight.DarkActionBar.Bridge">

2. XML代码

UI效果

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
    android:background="#888888"
    android:orientation="vertical">

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:orientation="vertical">

            <TextView
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginTop="10dp"
                android:gravity="center"
                android:text="@string/calTitle"
                android:textColor="@color/black"
                android:textSize="17sp" />

            <TextView
                android:id="@+id/tv_res"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_marginLeft="8dp"
                android:layout_marginTop="5dp"
                android:layout_marginRight="8dp"
                android:background="#FFFFFF"
                android:gravity="right|bottom"
                android:lines="3"
                android:text="0"
                android:textColor="@color/black"
                android:textSize="25sp" />

            <GridLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:columnCount="4"
                android:rowCount="5"
                android:layout_marginTop="10dp">
                <Button
                    android:id="@+id/btn_ce"
                    android:text="@string/CE"
                    android:layout_width="0dp"
                    android:layout_height="@dimen/btn_height"
                    android:layout_columnWeight="1"
                    android:gravity="center"
                    android:textSize="@dimen/btn_font_size"
                    android:textColor="@color/black"
                    />
                <Button
                    android:id="@+id/btn_multi"
                    android:text="@string/multi"
                    android:layout_width="0dp"
                    android:layout_height="@dimen/btn_height"
                    android:layout_columnWeight="1"
                    android:gravity="center"
                    android:textSize="@dimen/btn_font_size"
                    android:textColor="@color/black"
                    />
                <Button
                    android:id="@+id/btn_divide"
                    android:text="@string/divide"
                    android:layout_width="0dp"
                    android:layout_height="@dimen/btn_height"
                    android:layout_columnWeight="1"
                    android:gravity="center"
                    android:textSize="@dimen/btn_font_size"
                    android:textColor="@color/black"
                    />
                <Button
                    android:id="@+id/btn_back"
                    android:text="@string/back"
                    android:layout_width="0dp"
                    android:layout_height="@dimen/btn_height"
                    android:layout_columnWeight="1"
                    android:gravity="center"
                    android:textSize="@dimen/btn_font_size"
                    android:textColor="@color/black"
                    />
                <Button
                    android:id="@+id/btn_seven"
                    android:text="@string/seven"
                    android:layout_width="0dp"
                    android:layout_height="@dimen/btn_height"
                    android:layout_columnWeight="1"
                    android:gravity="center"
                    android:textSize="@dimen/btn_font_size"
                    android:textColor="@color/black"
                    />
                <Button
                    android:id="@+id/btn_eight"
                    android:text="@string/eight"
                    android:layout_width="0dp"
                    android:layout_height="@dimen/btn_height"
                    android:layout_columnWeight="1"
                    android:gravity="center"
                    android:textSize="@dimen/btn_font_size"
                    android:textColor="@color/black"
                    />
                <Button
                    android:id="@+id/btn_nine"
                    android:text="@string/nine"
                    android:layout_width="0dp"
                    android:layout_height="@dimen/btn_height"
                    android:layout_columnWeight="1"
                    android:gravity="center"
                    android:textSize="@dimen/btn_font_size"
                    android:textColor="@color/black"
                    />
                <Button
                    android:id="@+id/btn_plus"
                    android:text="@string/plus"
                    android:layout_width="0dp"
                    android:layout_height="@dimen/btn_height"
                    android:layout_columnWeight="1"
                    android:gravity="center"
                    android:textSize="@dimen/btn_font_size"
                    android:textColor="@color/black"
                    />
                <Button
                    android:id="@+id/btn_four"
                    android:text="@string/four"
                    android:layout_width="0dp"
                    android:layout_height="@dimen/btn_height"
                    android:layout_columnWeight="1"
                    android:gravity="center"
                    android:textSize="@dimen/btn_font_size"
                    android:textColor="@color/black"
                    />
                <Button
                    android:id="@+id/btn_five"
                    android:text="@string/five"
                    android:layout_width="0dp"
                    android:layout_height="@dimen/btn_height"
                    android:layout_columnWeight="1"
                    android:gravity="center"
                    android:textSize="@dimen/btn_font_size"
                    android:textColor="@color/black"
                    />
                <Button
                    android:id="@+id/btn_six"
                    android:text="@string/six"
                    android:layout_width="0dp"
                    android:layout_height="@dimen/btn_height"
                    android:layout_columnWeight="1"
                    android:gravity="center"
                    android:textSize="@dimen/btn_font_size"
                    android:textColor="@color/black"
                    />
                <Button
                    android:id="@+id/btn_minus"
                    android:text="@string/minus"
                    android:layout_width="0dp"
                    android:layout_height="@dimen/btn_height"
                    android:layout_columnWeight="1"
                    android:gravity="center"
                    android:textSize="@dimen/btn_font_size"
                    android:textColor="@color/black"
                    />
                <Button
                    android:id="@+id/btn_one"
                    android:text="@string/one"
                    android:layout_width="0dp"
                    android:layout_height="@dimen/btn_height"
                    android:layout_columnWeight="1"
                    android:gravity="center"
                    android:textSize="@dimen/btn_font_size"
                    android:textColor="@color/black"
                    />
                <Button
                    android:id="@+id/btn_two"
                    android:text="@string/two"
                    android:layout_width="0dp"
                    android:layout_height="@dimen/btn_height"
                    android:layout_columnWeight="1"
                    android:gravity="center"
                    android:textSize="@dimen/btn_font_size"
                    android:textColor="@color/black"
                    />
                <Button
                    android:id="@+id/btn_three"
                    android:text="@string/three"
                    android:layout_width="0dp"
                    android:layout_height="@dimen/btn_height"
                    android:layout_columnWeight="1"
                    android:gravity="center"
                    android:textSize="@dimen/btn_font_size"
                    android:textColor="@color/black"
                    />
                <ImageButton
                    android:id="@+id/btn_radical"
                    android:src="@drawable/radical"
                    android:scaleType="centerInside"
                    android:layout_width="0dp"
                    android:layout_height="@dimen/btn_height"
                    android:layout_columnWeight="1"
                    android:gravity="center"
                    tools:ignore="TouchTargetSizeCheck,SpeakableTextPresentCheck"
                    />
                <Button
                    android:id="@+id/btn_fraction"
                    android:text="@string/fraction"
                    android:layout_width="0dp"
                    android:layout_height="@dimen/btn_height"
                    android:layout_columnWeight="1"
                    android:gravity="center"
                    android:textSize="@dimen/btn_font_size"
                    android:textColor="@color/black"
                    />
                <Button
                    android:id="@+id/btn_zero"
                    android:text="@string/zero"
                    android:layout_width="0dp"
                    android:layout_height="@dimen/btn_height"
                    android:layout_columnWeight="1"
                    android:gravity="center"
                    android:textSize="@dimen/btn_font_size"
                    android:textColor="@color/black"
                    />
                <Button
                    android:id="@+id/btn_point"
                    android:text="@string/point"
                    android:layout_width="0dp"
                    android:layout_height="@dimen/btn_height"
                    android:layout_columnWeight="1"
                    android:gravity="center"
                    android:textSize="@dimen/btn_font_size"
                    android:textColor="@color/black"
                    />
                <Button
                    android:id="@+id/btn_equal"
                    android:text="@string/equal"
                    android:layout_width="0dp"
                    android:layout_height="@dimen/btn_height"
                    android:layout_columnWeight="1"
                    android:gravity="center"
                    android:textSize="@dimen/btn_font_size"
                    android:textColor="@color/black"
                    />

            </GridLayout>
        </LinearLayout>
    </ScrollView>

</LinearLayout>

3.Java代码

package com.example.learn;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class CalActivity extends AppCompatActivity implements View.OnClickListener {
    //运算符
    private String operator = "";
    //第一个操作数
    private String firstNum = "";
    //第二个操作数
    private String secondNum = "";
    //结果
    private String result = "";
    //显示的文本内容
    private String showText = "";
    //记录结果
    private TextView tv_res;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_cal);
        //发现页面控件
        tv_res = findViewById(R.id.tv_res);
        //Button 组件
        //1 运算符
        findViewById(R.id.btn_back).setOnClickListener(this);
        findViewById(R.id.btn_ce).setOnClickListener(this);
        findViewById(R.id.btn_plus).setOnClickListener(this);
        findViewById(R.id.btn_minus).setOnClickListener(this);
        findViewById(R.id.btn_multi).setOnClickListener(this);
        findViewById(R.id.btn_divide).setOnClickListener(this);
        findViewById(R.id.btn_radical).setOnClickListener(this);
        findViewById(R.id.btn_equal).setOnClickListener(this);
        findViewById(R.id.btn_fraction).setOnClickListener(this);
        findViewById(R.id.btn_point).setOnClickListener(this);
        //2、数字
        findViewById(R.id.btn_zero).setOnClickListener(this);
        findViewById(R.id.btn_one).setOnClickListener(this);
        findViewById(R.id.btn_two).setOnClickListener(this);
        findViewById(R.id.btn_three).setOnClickListener(this);
        findViewById(R.id.btn_four).setOnClickListener(this);
        findViewById(R.id.btn_five).setOnClickListener(this);
        findViewById(R.id.btn_six).setOnClickListener(this);
        findViewById(R.id.btn_seven).setOnClickListener(this);
        findViewById(R.id.btn_eight).setOnClickListener(this);
        findViewById(R.id.btn_nine).setOnClickListener(this);

    }

    @Override
    public void onClick(View view) {
        String inputText = "";
        //处理图片按钮
        if (view.getId() == R.id.btn_radical) {
            inputText = "#";
        } else {
            inputText = ((Button) view).getText().toString();
        }
        switch (view.getId()) {
            //清空按钮
            case R.id.btn_ce:
                initZero();
                break;
            //回退按钮
            case R.id.btn_back:
                clear();
                break;
            //四则运算符
            case R.id.btn_plus:
            case R.id.btn_minus:
            case R.id.btn_divide:
            case R.id.btn_multi:
                operator = inputText;
                show(showText + operator);
                break;
            //求导数
            case R.id.btn_fraction:
                result = String.valueOf(getFraction());
                //刷新结果
                refreshRes(result);
                //显示
                show(showText + "/=" +result);
                break;
            //求开方
            case R.id.btn_radical:
                result = String.valueOf(getRadical());
                //刷新结果
                refreshRes(result);
                //显示
                show(showText + "/=" +result);
                break;
            //等号
            case R.id.btn_equal:
                result = String.valueOf(getRes());
                //刷新结果
                refreshRes(result);
                //显示
                show(showText + "=" +result);
                break;
            default:
                //无运算符 则输入数字为第一个数
                if (operator.equals("")) {
                    firstNum = firstNum + inputText;
                } else {
                    secondNum = secondNum + inputText;
                }
                //判断是否首先输入了0或者小数点
                if (showText.equals("0") && !inputText.equals(".")) {
                    show(inputText);
                } else {
                    //显示输入的操作数
                    show(showText + inputText);
                }
                break;
        }
    }

    private double getRadical() {
        return Math.sqrt(Double.parseDouble(firstNum));
    }

    private double getFraction() {
        return 1.0 / Double.parseDouble(firstNum);
    }

    private void initZero() {
        showText = "0";
        operator = "";
        firstNum = "";
        secondNum = "";
        tv_res.setText(showText);
    }

    //清空操作
    private void clear() {
        showText = "";
        operator = "";
        firstNum = "";
        secondNum = "";
        tv_res.setText(showText);
    }

    //show input
    private void show(String text) {
        showText = text;
        tv_res.setText(showText);
    }

    private double getRes() {
        switch (operator) {
            case "+":
                return Double.parseDouble(firstNum) + Double.parseDouble(secondNum);

            case "-":
                return Double.parseDouble(firstNum) - Double.parseDouble(secondNum);

            case "*":
                return Double.parseDouble(firstNum) * Double.parseDouble(secondNum);

            default:
                return Double.parseDouble(firstNum) / Double.parseDouble(secondNum);

        }
    }

    //运行equal后刷新状态
    private void refreshRes(String new_res) {
        result = new_res;
        firstNum=result;
        secondNum="";
        operator="";
    }

}

以上代码可实现简易计算器的运算,但存在Bug,但是简单的计算是没问题。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

最新AI创作系统,ChatGPT商业运营系统网站源码,SparkAi-v6.5.0,Ai绘画/GPTs应用,文档对话

一、文章前言 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统&#xff0c;支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美&#xff0c;那么如何搭建部署AI创作ChatGPT&#xff1f;小编这里写一个详细图文教程吧。已支持…

【C语言的完结】:最后的测试题

看到这句话的时候证明&#xff1a; 此刻你我都在努力~ 个人主页&#xff1a; Gu Gu Study ​​ 专栏&#xff1a;语言的起点-----C语言 喜欢的一句话&#xff1a; 常常会回顾努力的自己&#xff0c;所以要为自己的努力留下足迹…

Delta lake with Java--数据增删改查

之前写的关于spark sql 操作delta lake表的&#xff0c;总觉得有点混乱&#xff0c;今天用Java以真实的数据来进行一次数据的CRUD操作&#xff0c;所涉及的数据来源于Delta lake up and running配套的 GitGitHub - benniehaelen/delta-lake-up-and-running: Companion reposito…

软件无线电系列——信道编译码

微信公众号上线&#xff0c;搜索公众号小灰灰的FPGA,关注可获取相关源码&#xff0c;定期更新有关FPGA的项目以及开源项目源码&#xff0c;包括但不限于各类检测芯片驱动、低速接口驱动、高速接口驱动、数据信号处理、图像处理以及AXI总线等 本节目录 一、信道编译码 1、数字…

开源的贴吧数据查询工具

贴吧数据查询工具 这是一个贴吧数据查询工具&#xff0c;目前仍处于开发阶段。 本地运行 要本地部署这个项目&#xff0c;请 克隆这个仓库并前往项目目录 git clone https://github.com/Dilettante258/tieba-tools.git cd tieba-tools安装依赖 pnpm install运行项目 np…

服务器数据恢复—异常断电导致RAID模块故障的数据恢复案例

服务器数据恢复环境&#xff1a; 某品牌ProLiant DL380系列服务器&#xff0c;服务器中有一组由6块SAS硬盘组建的RAID5阵列&#xff0c;WINDOWS SERVER操作系统&#xff0c;作为企业内部文件服务器使用。 服务器故障&#xff1a; 机房供电几次意外中断&#xff0c;服务器出现故…

RMQ从入门到精通

一.概述与安装 //RabbitMQ //1.核心部分-高级部分-集群部分 //2.什么是MQ 消息队列message queue 先入先出原则;消息通信服务 //3.MQ的大三功能 流量消峰 应用解耦 消息中间件 //&#xff08;1&#xff09;人-订单系统(1万次/S)—> 人 - MQ(流量消峰,对访问人员进行排队) -…

Java 【数据结构】常见排序算法实用详解(上) 插入排序/希尔排序/选择排序/堆排序【贤者的庇护】

登神长阶 上古神器-常见排序算法 插入排序/选择排序/堆排序 &#x1f4d4; 一.排序算法 &#x1f4d5;1.排序的概念 排序 &#xff1a;所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作。 稳定性&a…

【Python】函数设计

1.联系函数的设计 2.找质数 3.找因子 4.判断水仙花数 5.斐波拉契数列递归调用&#xff0c;并用数组存储已计算过的数&#xff0c;减少重复计算 1、计算利息和本息 编写两个函数分别按单利和复利计算利息,根据本金、年利率、存款年限得到本息和和利息。调用这两个函数计算1…

学习Rust的第22天:mini_grep第2部分

书接上文&#xff0c;在本文中&#xff0c;我们学习了如何通过将 Rust 程序的逻辑移至单独的库箱中并采用测试驱动开发 (TDD) 实践来重构 Rust 程序。通过在实现功能之前编写测试&#xff0c;我们确保了代码的可靠性。我们涵盖了基本的 Rust 概念&#xff0c;例如错误处理、环境…

【linux-汇编-点灯之思路-程序】

目录 1. ARM汇编中的一些注意事项2. IMXULL汇编点灯的前序&#xff1a;3. IMXULL汇编点灯之确定引脚&#xff1a;4. IMXULL汇编点灯之引脚功能编写&#xff1a;4.1 第一步&#xff0c;开时钟4.2 第二步&#xff0c;定功能&#xff08;MUX&#xff09;4.3 第三步&#xff0c;定电…

【笔试训练】day17

1.小乐乐该数字 遇到按位处理的情况可以考虑用字符串去读 代码&#xff1a; #define _CRT_SECURE_NO_WARNINGS 1 #include <iostream> #include<string> using namespace std;int main() {string str;cin >> str;int ans 0;for (int i 0; i < str.siz…

JavaEE 初阶篇-深入了解 Junit 单元测试框架和 Java 中的反射机制(使用反射做一个简易版框架)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 Junit 单元测试框架概述 1.1 使用 Junit 框架进行测试业务代码 1.2 Junit 单元测试框架的常用注解&#xff08;Junit 4.xxx 版本&#xff09; 2.0 反射概述 2.1 获…

神经网络中的优化方法

一、引入 在传统的梯度下降优化算法中&#xff0c;如果碰到平缓区域&#xff0c;梯度值较小&#xff0c;参数优化变慢 &#xff0c;遇到鞍点&#xff08;是指在某些方向上梯度为零而在其他方向上梯度非零的点。&#xff09;&#xff0c;梯度为 0&#xff0c;参数无法优化&…

机器人系统ros2-开发实践04-ROS2 中 tf2的定义及示例说明

1. what ros2 tf2 &#xff1f; tf2的全称是transform2&#xff0c;在ROS&#xff08;Robot Operating System&#xff09;中&#xff0c;它是专门用于处理和变换不同坐标系间位置和方向的库。这个名字来源于“transform”这个词&#xff0c;表示坐标变换&#xff0c;而“2”则…

【Leetcode每日一题】 动态规划 - 简单多状态 dp 问题 - 删除并获得点数(难度⭐⭐)(70)

1. 题目解析 题目链接&#xff1a;740. 删除并获得点数 这个问题的理解其实相当简单&#xff0c;只需看一下示例&#xff0c;基本就能明白其含义了。 2.算法原理 问题分析 本题是「打家劫舍」问题的变种&#xff0c;但核心逻辑依然保持一致。题目要求从给定的数组nums中选择…

C++ stack和queue的使用方法与模拟实现

文章目录 一、 stack的使用方法二、 queue的使用方法三、 容器适配器四、 stack的模拟实现五、 queue的模拟实现 一、 stack的使用方法 stack介绍文档 stack是一种容器适配器&#xff0c;专门用在具有后进先出操作的上下文环境中&#xff0c;其删除只能从容器的一端进行元素的…

Windows如何通过wsl2迅速启动Docker desktop的PHP的Hyperf项目容器?

一、安装WSL 什么是WSL&#xff1f; 官网&#xff1a;什么是WSL&#xff1f; Windows Subsystem for Linux (WSL) 是一个在Windows 10和Windows 11上运行原生Linux二进制可执行文件的兼容性层。 换句话说&#xff0c;WSL让你可以在Windows系统上运行Linux环境&#xff0c;而无需…

【linux】unzip解压乱码或者报错处理办法

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全…

2023-2024年数字化转型报告/方案合集(精选198份)

数字化转型报告/方案&#xff08;精选198份&#xff09; 2023-2024年 来源&#xff1a;2023-2024年数字化转型报告/方案合集&#xff08;精选198份&#xff09; 【以下是资料目录】 2023-2024年度医药健康行业数字化调研报告 2023-2024中国财务数字化报告 2023⻝品饮料行业…