Android studio 简单计算器的编写


Posted in Java/Android onMay 20, 2022

本文实例为大家分享了Android studio实现简单计算器的具体代码,供大家参考,具体内容如下

话不多说,首先附上代码:

MainActivity.java

package com.example.calculator;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.EditText;

import java.util.Stack;

public class MainActivity extends AppCompatActivity {

    EditText edit = null;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        edit = findViewById(R.id.edit_textview);
    }

    public void btnClick(View view) {
        switch (view.getId()){
            case R.id.btn0:
                edit.append("0");
                break;
            case R.id.btn1:
                edit.append("1");
                break;
            case R.id.btn2:
                edit.append("2");
                break;
            case R.id.btn3:
                edit.append("3");
                break;
            case R.id.btn4:
                edit.append("4");
                break;
            case R.id.btn5:
                edit.append("5");
                break;
            case R.id.btn6:
                edit.append("6");
                break;
            case R.id.btn7:
                edit.append("7");
                break;
            case R.id.btn8:
                edit.append("8");
                break;
            case R.id.btn9:
                edit.append("9");
                break;
            case R.id.btnPlus:
                edit.append("+");
                break;
            case R.id.btnSubtract:
                edit.append("-");
                break;
            case R.id.btnMultiply:
                edit.append("*");
                break;
            case R.id.btnDivide:
                edit.append("/");
                break;
        }
    }

    public void btnEqual(View view) {
        String str = edit.getText().toString();//1+2
        String res="";
        //Java计算代码
        String result = calculate(str);
        edit.setText(result);
    }

    private static int number(char[] arr,int start,int end){
        StringBuilder buffer = new StringBuilder();
        for(int i=start;i<=end;i++){
            buffer.append(arr[i]);
        }
        return Integer.parseInt(buffer.toString());
    }
    // 待实现函数,在此函数中填入答题代码
    private static int comp(String op){
        if(op.equals("+") || op.equals("-"))
            return 1;
        if(op.equals("*") || op.equals("/"))
            return 2;
        return 0;
    }
    private static String compute(Integer a,Integer b,String op){
        Integer res;
        if(op.equals("+")) {
            res = a + b;
            return res.toString();
        }
        if (op.equals("-")) {
            res= a - b;
            return res.toString();
        }
        if (op.equals("*")) {
            res = a * b;
            return res.toString();
        }
        if (op.equals("/") && b!=0) {
            res= a / b;
            return res.toString();
        }else{
            return "error";
        }
    }
    private static String calculate(String source) {
        Stack<Integer> numbers=new Stack<>();
        Stack<String> operator=new Stack<>();
        operator.push(".");
        char[] exps=source.toCharArray();
        int start=0;
        if(exps[0]=='-') numbers.push(0);
        for(int j=0;j<exps.length;j++){
            if(exps[j]=='+' || exps[j]=='*' || exps[j]=='/' || exps[j]=='-'){
                if (start <= j - 1) {
                    numbers.push(number(exps,start,j-1));
                }
                start=j+1;
                while (comp(operator.peek())>=comp(String.valueOf(exps[j]))){
                    Integer two=numbers.peek();numbers.pop();
                    Integer one=numbers.peek();numbers.pop();
                    String result=compute(one,two,operator.peek());operator.pop();
                    if (result.equals("error")) {
                        return result;
                    }
                    numbers.push(Integer.parseInt(result));
                }
                operator.push(String.valueOf(exps[j]));
            }
        }
        numbers.push(number(exps,start,exps.length-1));
        while (operator.size()>1){
            Integer two=numbers.peek();numbers.pop();
            Integer one =numbers.peek();numbers.pop();
            String op=operator.peek();operator.pop();
            String value = compute(one, two, op);
            if (value.equals("error")) {
                return value;
            }
            numbers.push(Integer.parseInt(value));
        }
        return numbers.peek().toString();
    }


    public void btnClear(View view) {
        edit.setText("");
    }
}

activity_main.xml

<?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:orientation="vertical"
    tools:context=".MainActivity">

    <EditText
        android:id="@+id/edit_textview"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"/>

    <TableLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:stretchColumns="0,1,2,3">

        <TableRow>

            <Button
                android:id="@+id/btn7"
                android:layout_height="match_parent"
                android:onClick="btnClick"
                android:text="7" />
            <Button
                android:id="@+id/btn8"
                android:text="8"
                android:onClick="btnClick"/>
            <Button
                android:id="@+id/btn9"
                android:text="9"
                android:onClick="btnClick"/>
            <Button
                android:id="@+id/btnDivide"
                android:text="÷"
                android:onClick="btnClick"/>
        </TableRow>

        <TableRow>
            <Button
                android:id="@+id/btn4"
                android:text="4"
                android:onClick="btnClick"/>
            <Button
                android:id="@+id/btn5"
                android:text="5"
                android:onClick="btnClick"/>
            <Button
                android:id="@+id/btn6"
                android:text="6"
                android:onClick="btnClick"/>
            <Button
                android:id="@+id/btnMultiply"
                android:text="×"
                android:onClick="btnClick"/>
        </TableRow>

        <TableRow>
            <Button
                android:id="@+id/btn1"
                android:text="1"
                android:onClick="btnClick"/>
            <Button
                android:id="@+id/btn2"
                android:text="2"
                android:onClick="btnClick"/>
            <Button
                android:id="@+id/btn3"
                android:text="3"
                android:onClick="btnClick"/>
            <Button
                android:id="@+id/btnSubtract"
                android:text="-"
                android:onClick="btnClick"/>
        </TableRow>

        <TableRow>
            <Button
                android:id="@+id/btnClear"
                android:text="C"
                android:onClick="btnClear"/>
            <Button
                android:id="@+id/btn0"
                android:text="0"
                android:onClick="btnClick"/>
            <Button
                android:id="@+id/btnEqual"
                android:text="="
                android:onClick="btnEqual"/>
            <Button
                android:id="@+id/btnPlus"
                android:text="+"
                android:onClick="btnClick"/>
        </TableRow>
    </TableLayout>

</LinearLayout>

计算器界面:

Android studio 简单计算器的编写


Tags in this post...

Java/Android 相关文章推荐
源码解读Spring-Integration执行过程
Jun 11 Java/Android
Spring Bean的实例化之属性注入源码剖析过程
Jun 13 Java/Android
如何解决springcloud feign 首次调用100%失败的问题
Jun 23 Java/Android
java多态注意项小结
Oct 16 Java/Android
MyBatis自定义SQL拦截器示例详解
Oct 24 Java/Android
Java实现给Word文件添加文字水印
Feb 15 Java/Android
Java基于Dijkstra算法实现校园导游程序
Mar 17 Java/Android
Java 数据结构七大排序使用分析
Apr 02 Java/Android
Java8 Stream API 提供了一种高效且易于使用的处理数据的方式
Apr 13 Java/Android
Spring Boot 使用 Spring-Retry 进行重试框架
Apr 24 Java/Android
利用Java连接Hadoop进行编程
Jun 28 Java/Android
Java Spring读取和存储详细操作
Aug 05 Java/Android
mybatis 获取更新记录的id
May 20 #Java/Android
Android Studio 计算器开发
May 20 #Java/Android
Android Studio实现简易进制转换计算器
May 20 #Java/Android
Spring 使用注解开发
May 20 #Java/Android
MyBatis核心源码深度剖析SQL语句执行过程
Java 轮询锁使用时遇到问题
May 11 #Java/Android
Java 死锁解决方案
May 11 #Java/Android
You might like
php数组函数序列之krsort()- 对数组的元素键名进行降序排序,保持索引关系
2011/11/02 PHP
php环境下利用session防止页面重复刷新的具体实现
2014/01/09 PHP
PHP过滤黑名单关键字的方法
2014/12/01 PHP
学习php设计模式 php实现原型模式(prototype)
2015/12/07 PHP
PHP 闭包详解及实例代码
2016/09/28 PHP
javascript编程起步(第三课)
2007/02/27 Javascript
来自国外的14个图片放大编辑的jQuery插件整理
2010/10/20 Javascript
关于COOKIE个数与大小的问题
2011/01/17 Javascript
jQuery让控件左右移动的三种实现方法
2013/09/08 Javascript
node.js中的fs.fchmodSync方法使用说明
2014/12/16 Javascript
浅谈javascript 函数内部属性
2015/01/21 Javascript
jquery滚动特效集锦
2015/06/03 Javascript
javascript html5 canvas实现可拖动省份的中国地图
2016/03/11 Javascript
Bootstrap基本插件学习笔记之按钮(21)
2016/12/08 Javascript
bootstrap table方法之expandRow-collapseRow展开或关闭当前行数据
2020/08/09 Javascript
移动端效果之IndexList详解
2017/10/20 Javascript
layui实现数据分页功能(ajax异步)
2019/07/27 Javascript
python绘图方法实例入门
2015/05/19 Python
Python字符串切片操作知识详解
2016/03/28 Python
python itchat实现微信自动回复的示例代码
2017/08/14 Python
python获取多线程及子线程的返回值
2017/11/15 Python
PyQt5每天必学之布局管理
2018/04/19 Python
python实现微信每日一句自动发送给喜欢的人
2019/04/29 Python
python对文件目录的操作方法实例总结
2019/06/24 Python
python opencv 图像拼接的实现方法
2019/06/27 Python
kafka监控获取指定topic的消息总量示例
2019/12/23 Python
Python如何将函数值赋给变量
2020/04/28 Python
澳大利亚快时尚鞋类市场:Billini
2018/05/20 全球购物
iHerb中文官网:维生素、保健品和健康产品
2018/11/01 全球购物
英国地毯卖家:The Rug Seller
2019/07/18 全球购物
初中生操行评语大全
2014/04/24 职场文书
小学假期安全广播稿
2014/09/28 职场文书
开展党的群众路线教育实践活动总结报告
2014/10/31 职场文书
英文版辞职信
2015/02/28 职场文书
go语言中http超时引发的事故解决
2021/06/02 Golang
MYSQL 运算符总结
2021/11/11 MySQL