当前位置: 首页 > news >正文

Android开发案例——简单计算器

实现计算机的简单功能

1、显示页面jsj.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"android:background="#eee"><TextViewandroid:layout_width="match_parent"android:layout_height="80dp"android:background="#42714A"android:gravity="center_vertical"android:text="Chapter03"android:textColor="#fff"android:textSize="25sp"/><TextViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:text="简单计算机"android:gravity="center_horizontal"android:textSize="20sp"android:textColor="#000"/><TextViewandroid:id="@+id/tvresult"android:layout_width="match_parent"android:layout_height="180dp"android:background="#fff"android:layout_margin="5dp"android:text="0"android:textSize="40sp"android:textStyle="bold"android:textColor="#000"android:gravity="bottom|right"/><GridLayoutandroid:layout_marginTop="20dp"android:layout_width="match_parent"android:layout_height="wrap_content"android:columnCount="4"><Buttonandroid:id="@+id/btn_ce"style="@style/MyTextStyle"android:text="CE"/><Buttonandroid:id="@+id/btn_divide"style="@style/MyTextStyle"android:text="÷"/><Buttonandroid:id="@+id/btn_multiply"style="@style/MyTextStyle"android:text="x" /><Buttonandroid:id="@+id/btn_c"style="@style/MyTextStyle"android:text="C"/><Buttonandroid:id="@+id/btn_7"style="@style/MyTextStyle"android:text="7"/><Buttonandroid:id="@+id/btn_8"style="@style/MyTextStyle"android:text="8"/><Buttonandroid:id="@+id/btn_9"style="@style/MyTextStyle"android:text="9"/><Buttonandroid:id="@+id/btn_plus"style="@style/MyTextStyle"android:text="+"/><Buttonandroid:id="@+id/btn_4"style="@style/MyTextStyle"android:text="4"/><Buttonandroid:id="@+id/btn_5"style="@style/MyTextStyle"android:text="5"/><Buttonandroid:id="@+id/btn_6"style="@style/MyTextStyle"android:text="6"/><Buttonandroid:id="@+id/btn_minus"style="@style/MyTextStyle"android:text="—"/><Buttonandroid:id="@+id/btn_1"style="@style/MyTextStyle"android:text="1"/><Buttonandroid:id="@+id/btn_2"style="@style/MyTextStyle"android:text="2"/><Buttonandroid:id="@+id/btn_3"style="@style/MyTextStyle"android:text="3"/><Buttonandroid:id="@+id/btn_sqrt"style="@style/MyTextStyle"android:text="√"/><Buttonandroid:id="@+id/btn_reciprocal"style="@style/MyTextStyle"android:text="1/X"/><Buttonandroid:id="@+id/btn_0"style="@style/MyTextStyle"android:text="0" /><Buttonandroid:id="@+id/btn_dot"style="@style/MyTextStyle"android:text="."/><Buttonandroid:id="@+id/btn_equal"style="@style/MyTextStyle"android:text="="/></GridLayout>
</LinearLayout>

2、样式页面 style.xml

<?xml version="1.0" encoding="utf-8"?>
<resources><style name="MyTextStyle"><item name="android:textSize">23sp</item><item name="android:layout_width">0dp</item><item name="android:layout_height">80dp</item><item name="android:layout_columnWeight">1</item></style></resources>

3、后端代码CalculatorActivity.java

package com.example.android;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import java.text.DecimalFormat;public class CalculatorActivity extends AppCompatActivity {private TextView tvResult; //用于显示计算结果和输入表达式的控件private String currentInput = "0"; //初始值为0private String operator = ""; //当前选择的运算符,初始为空字符串private double firstNumber = 0; //存储第一个操作数,初始值为0private boolean isNewNumber = true; //标记是否开始输入新的数字,初始为true@Override     //活动创建时调用的方法protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.jsj); //活动布局界面tvResult = findViewById(R.id.tvresult); //获取对象int[] buttonIds = {R.id.btn_ce, R.id.btn_divide, R.id.btn_multiply, R.id.btn_c,R.id.btn_7, R.id.btn_8, R.id.btn_9, R.id.btn_plus,R.id.btn_4, R.id.btn_5, R.id.btn_6, R.id.btn_minus,R.id.btn_1, R.id.btn_2, R.id.btn_3, R.id.btn_sqrt,R.id.btn_reciprocal, R.id.btn_0, R.id.btn_dot, R.id.btn_equal};  //存储所有按钮的idfor (int id : buttonIds) { //为每个按钮设置点击事件监听器Button button = findViewById(id);button.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {handleButtonClick(((Button) v).getText().toString()); //调用handleButtonClick方法}});}}private void handleButtonClick(String buttonText) {switch (buttonText) {case "CE":currentInput = "0";break;case "C":currentInput = "0";operator = "";firstNumber = 0;isNewNumber = true;break;  //恢复初始状态case "÷":case "x":case "+":case "—":if (!operator.isEmpty()) {calculateResult(); //如果存在运算符,调用calculateResult方法}operator = buttonText;firstNumber = Double.parseDouble(currentInput);isNewNumber = true;break;case "=": //调用calculateResult方法计算结果,清空operatorcalculateResult();operator = "";isNewNumber = true;break;case "√":double sqrtResult = Math.sqrt(Double.parseDouble(currentInput));currentInput = formatResult(sqrtResult);break;case "1/X":if (!currentInput.equals("0")) { //分母不能为0double reciprocalResult = 1 / Double.parseDouble(currentInput);currentInput = formatResult(reciprocalResult);} else {currentInput = "错误";}break;case ".":if (isNewNumber) { //如果是新数字,currentInput设置为0currentInput = "0.";isNewNumber = false;} else if (!currentInput.contains(".")) {currentInput += "."; //如果不包含.则在后面追加.}break;default:if (isNewNumber) {currentInput = buttonText;isNewNumber = false;} else {currentInput += buttonText;}break;}tvResult.setText(currentInput); //将值设置到tvResult中显示}private void calculateResult() {double secondNumber = Double.parseDouble(currentInput); //将输入内容转换成double型double result = 0;switch (operator) {case "÷":if (secondNumber != 0) { //如果除数不为0result = firstNumber / secondNumber;} else {currentInput = "错误";return;}break;case "x":result = firstNumber * secondNumber;break;case "+":result = firstNumber + secondNumber;break;case "—":result = firstNumber - secondNumber;break;}currentInput = formatResult(result); //将结果赋值给currentInput}private String formatResult(double result) { //格式化DecimalFormat decimalFormat = new DecimalFormat("#.########");return decimalFormat.format(result);}
}

相关文章:

  • 【经验记录贴】活用shell,提高工作效率
  • 【Python进阶】列表:全面解析与实战指南
  • 设计模式每日硬核训练 Day 13:桥接模式(Bridge Pattern)完整讲解与实战应用
  • ThreadPoolExecutor 多线程用requests请求一个地址的时候为什么会报错,而多进程用requests请求一个地址的时候不会报错,为什么?
  • 04.Python代码NumPy-通过索引或切片来访问和修改
  • 【正点原子STM32MP257连载】第四章 ATK-DLMP257B功能测试——4G模块ME3630测试
  • TinyEngine 2.4版本正式发布:文档全面开源,实现主题自定义,体验焕新升级!
  • Java转Go记录:Slice解密
  • 负载均衡的实现方式有哪些?
  • 【大模型】DeepSeek + Coze 打造个人专属AI智能体使用详解
  • uniapp-商城-27-vuex 通用方法
  • 数据库系统概论|第三章:关系数据库标准语言SQL—课程笔记4
  • OpenGL shader开发实战学习笔记:第十章 法线贴图
  • 记录一下Springboot项目的Security,配置
  • 第16届蓝桥STEMA真题剖析-2024年12月22日Scratch初/中级组
  • 线代第二章矩阵第三、四课:矩阵乘法和方阵的幂
  • 主流物理仿真引擎和机器人/强化学习仿真平台对比
  • Spring缓存抽象机制
  • ADB的安装及抓取日志(2)
  • Kafka深度解析与实战应用
  • 影响网站加载速度/哈尔滨优化网站方法
  • 广州网站建设+致茂/google seo实战教程
  • 网站建设超链接字体变色代码/百度深圳总部
  • java做的大型网站/市场调研问卷
  • 国内 上市网站建设公司排名/站长网站大全
  • 怎么样自己建设网站/百度一下官网首页百度一下