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

news2025/1/13 10:01:37

 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,但是简单的计算是没问题。

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

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

相关文章

【nature review】用于非易失性射频开关技术的新兴存储电子器件

这篇文章是一篇关于非挥发性射频&#xff08;RF&#xff09;开关技术的综述文章&#xff0c;发表在《Nature Reviews Electrical Engineering》2024年1月的期刊上。文章详细介绍了新兴的基于记忆电子技术的RF开关技术&#xff0c;特别是在二维&#xff08;2D&#xff09;材料方…

Oracle23ai来了,23爱,全能、超级巨兽...

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 作者&#xff1a;IT邦德 中国DBA联盟(ACDU)成员&#xff0c;10余年DBA工作经验&#xff0c; Oracle、PostgreSQL ACE CSDN博客专家及B站知名UP主&#xff0c;全网粉丝10万 擅长主流Oracle、My…

一毛钱不到的FH8208C单节锂离子和锂聚合物电池一体保护芯片

前言 目前市场上电池保护板&#xff0c;多为分体方案&#xff0c;多数场合使用没有问题&#xff0c;部分场合对空间有进一步要求&#xff0c;或者你不想用那么多器件&#xff0c;想精简一些&#xff0c;那么这个芯片就很合适&#xff0c;对于充电电池来说&#xff0c;应在使用…

gige工业相机突破(一)

gige相机能不能绕开相机生产商提供的sdk&#xff0c;而直接取到像&#xff1f; 两种办法&#xff0c;第一&#xff0c;gige vision2.0说明书&#xff0c;第二&#xff0c;genicam 首先你会去干什么事&#xff1f; 好几年&#xff0c;我都没有突破&#xff0c;老虎吃天&#x…

Jenkins流水线部署springboot项目

文章目录 Jenkins流水线任务介绍Jenkins流水线任务构建Jenkins流水线任务Groovy脚本Jenkinsfile实现 Jenkins流水线任务实现参数化构建拉取Git代码构建代码制作自定义镜像并发布 Jenkins流水线任务介绍 之前采用Jenkins的自由风格构建的项目&#xff0c;每个步骤流程都要通过不…

InfiniFlow 創始人兼CEO張穎峰確認出席“邊緣智能2024 - AI開發者峰會”

隨著AI技術的迅猛發展&#xff0c;全球正逐步進入邊緣計算智能化與分布式AI深度融合的新時代&#xff0c;共同書寫著分布式智能創新應用的壯麗篇章。邊緣智能&#xff0c;作為融合邊緣計算和智能技術的新興領域&#xff0c;正逐漸成為推動AI發展的關鍵力量。借助分布式和去中心…

JavaScript 如何理解柯里化函数结构及调用

文章目录 柯里化函数是什么逐步理解柯里化函数 柯里化函数是什么 柯里化&#xff08;Currying&#xff09;函数&#xff0c;又称部分求值&#xff0c;是一种函数转换技术。这种技术将一个接受多个参数的函数转换为一系列接受单一参数的函数。具体来说&#xff0c;一个柯里化的…

AI大模型探索之路-训练篇11:大语言模型Transformer库-Model组件实践

系列篇章&#x1f4a5; AI大模型探索之路-训练篇1&#xff1a;大语言模型微调基础认知 AI大模型探索之路-训练篇2&#xff1a;大语言模型预训练基础认知 AI大模型探索之路-训练篇3&#xff1a;大语言模型全景解读 AI大模型探索之路-训练篇4&#xff1a;大语言模型训练数据集概…

C语言 | Leetcode C语言题解之第67题二进制求和

题目&#xff1a; 题解&#xff1a; void reserve(char* s) {int len strlen(s);for (int i 0; i < len / 2; i) {char t s[i];s[i] s[len - i - 1], s[len - i - 1] t;} }char* addBinary(char* a, char* b) {reserve(a);reserve(b);int len_a strlen(a), len_b st…

LeetCode 面试经典150题 28.找出字符串中第一个匹配项的下标

题目&#xff1a;给你两个字符串 haystack 和 needle &#xff0c;请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标&#xff08;下标从 0 开始&#xff09;。如果 needle 不是 haystack 的一部分&#xff0c;则返回 -1 。 思路&#xff1a;暴力&#xff08;…

一个肉夹馍思考的零耦合设计

刷抖音听说知识付费是普通人的一个收入增长点&#xff0c;写了三十几篇文章一毛钱没赚&#xff0c;感觉有点沮丧。天上下着小雨雨&#xff0c;稀稀嗦嗦的&#xff0c;由于了很久还是买了一个&#x1f928;。 忽然觉得生活有点悲催&#xff0c;现在已经变得斤斤计较&#xff0c;…

「 网络安全常用术语解读 」SBOM主流格式CycloneDX详解

CycloneDX是软件供应链的现代标准。CycloneDX物料清单&#xff08;BOM&#xff09;可以表示软件、硬件、服务和其他类型资产的全栈库存。该规范由OWASP基金会发起并领导&#xff0c;由Ecma International标准化&#xff0c;并得到全球信息安全界的支持&#xff0c;如今CycloneD…

pg数据库学习知识要点分析-1

知识要点1 对象标识OID 在PostgreSQL内部&#xff0c;所有的数据库对象都通过相应的对象标识符&#xff08;object identifier&#xff0c;oid&#xff09;进行管理&#xff0c;这些标识符是无符号的4字节整型。数据库对象与相应oid 之间的关系存储在对应的系统目录中&#xf…

nginx--压缩https证书favicon.iconginx隐藏版本号 去掉nginxopenSSL

压缩功能 简介 Nginx⽀持对指定类型的⽂件进行压缩然后再传输给客户端&#xff0c;而且压缩还可以设置压缩比例&#xff0c;压缩后的文件大小将比源文件显著变小&#xff0c;这样有助于降低出口带宽的利用率&#xff0c;降低企业的IT支出&#xff0c;不过会占用相应的CPU资源…

【JVM】GC调优(优化JVM参数)、性能调优

GC调优 GC调优的主要目标是避免由垃圾回收引起程序性能下降。 GC调优的核心指标 垃圾回收吞吐量&#xff1a;执行用户代码时间/&#xff08;执行用户代码时间 GC时间&#xff09;延迟&#xff1a;GC延迟 业务执行时间内存使用量 GC调优步骤 发现问题&#xff1a;通过监控…

leetcode_43.字符串相乘

43. 字符串相乘 题目描述&#xff1a;给定两个以字符串形式表示的非负整数 num1 和 num2&#xff0c;返回 num1 和 num2 的乘积&#xff0c;它们的乘积也表示为字符串形式。 注意&#xff1a;不能使用任何内置的 BigInteger 库或直接将输入转换为整数。 示例 1: 输入: num1 &q…

python:用 mido 生成 midi文件,用 pygame 播放 mid文件

pip install mido Downloading mido-1.3.2-py3-none-any.whl (54 kB) Downloading packaging-23.2-py3-none-any.whl (53 kB) Installing collected packages: packaging, mido Successfully installed mido-1.3.2 packaging-23.2 mido 官网文档 pip intall pygame pygame…

Jenkins(超详细的Docker安装Jenkins教程!!!)

Jenkins Jenkins&#xff0c;原名 Hudson&#xff0c;2011 年改为现在的名字。它是一个开源的实现持续集成的软件工具。 官方网站&#xff1a;https://www.jenkins.io/ 中文文档&#xff1a;https://www.jenkins.io/zh/ 为什么需要Jenkins&#xff1f; 我们以前写完代码&a…

SpringBoot 基础简介

目录 1. SpringBoot 概述 1.1. 为什么会有springboot 1.1.1. 传统Spring 的两个缺点 1.1.2. Springboot 功能 2. SpringBoot 快速搭建 2.1. 创建Maven项目​编辑​编辑​编辑 2.2. 导入SpringBoot起步依赖 2.3. 定义controller 2.4. 添加引导类 2.5. 启动访问 3. Sprin…

开源的 RAG 和 workflow 技术对比调研

一、先来了解一下开源的技术有哪些&#xff0c;怎么样 我自己就是做RAG工作的&#xff0c;但是还是想关注一下开源的技术做到了什么程度。 所以调研了很长时间&#xff0c;也体验了一下。这里写一篇文章来分享一下结果。 我用五一的假期时间&#xff0c;来做调研&#xff0c;看…