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 相关文章推荐
浅谈什么是SpringBoot异常处理自动配置的原理
Jun 21 Java/Android
解决SpringBoot文件上传临时目录找不到的问题
Jul 01 Java/Android
mybatis 获取无数据的字段不显示的问题
Jul 15 Java/Android
Java比较两个对象中全部属性值是否相等的方法
Aug 07 Java/Android
Spring Security中用JWT退出登录时遇到的坑
Oct 16 Java/Android
spring注解 @PropertySource配置数据源全流程
Mar 25 Java/Android
Java基础——Map集合
Apr 01 Java/Android
Java8 Stream API 提供了一种高效且易于使用的处理数据的方式
Apr 13 Java/Android
Java对文件的读写操作方法
Apr 29 Java/Android
详解Spring Security如何在权限中使用通配符
Jun 28 Java/Android
SpringBoot项目部署到阿里云服务器的实现步骤
Jun 28 Java/Android
Spring中bean集合注入的方法详解
Jul 07 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内存管理之谁动了我的内存
2013/06/20 PHP
详解ThinkPHP3.2.3验证码显示、刷新、校验
2016/12/29 PHP
使用laravel根据用户类型来显示或隐藏字段
2019/10/17 PHP
node.js从数据库获取数据
2016/05/08 Javascript
JS中判断null的方法分析
2016/11/21 Javascript
jQuery插件扩展操作入门示例
2017/01/16 Javascript
vue Render中slots的使用的实例代码
2017/07/19 Javascript
vue组件父子间通信详解(三)
2017/11/07 Javascript
vue实现个人信息查看和密码修改功能
2018/05/06 Javascript
jQuery实现导航样式布局操作示例【可自定义样式布局】
2018/07/24 jQuery
ES6 迭代器与可迭代对象的实现
2019/02/11 Javascript
vue-cli 3 全局过滤器的实例代码详解
2019/06/03 Javascript
[02:36]DOTA2英雄基础教程 帕格纳
2014/01/20 DOTA
利用python和百度地图API实现数据地图标注的方法
2019/05/13 Python
Python获取基金网站网页内容、使用BeautifulSoup库分析html操作示例
2019/06/04 Python
Python爬取爱奇艺电影信息代码实例
2019/11/26 Python
pytorch实现focal loss的两种方式小结
2020/01/02 Python
Python面向对象程序设计之私有变量,私有方法原理与用法分析
2020/03/23 Python
Python使用Turtle模块绘制国旗的方法示例
2021/02/28 Python
微信小程序实现可实时改变转速的css3旋转动画实例代码
2018/09/11 HTML / CSS
iframe在移动端的缩放的示例代码
2018/10/12 HTML / CSS
Trip.com香港网站:Ctrip携程旗下,全球最大的网上旅游社之一
2016/08/01 全球购物
LTD Commodities:礼品,独特发现,家居装饰,家用器皿
2017/08/11 全球购物
加拿大时装零售商:Influence U
2018/12/22 全球购物
西班牙最大的在线滑板和街头服饰商店:Fillow.net
2019/04/15 全球购物
Michael Kors澳大利亚官网:世界知名的奢侈饰品和成衣设计师
2020/02/13 全球购物
施华洛世奇中国官网:SWAROVSKI中国
2020/06/16 全球购物
个人安全承诺书
2014/05/22 职场文书
领导班子四风查摆对照检查材料思想汇报
2014/10/05 职场文书
小学运动会前导词
2015/07/20 职场文书
2016感恩母亲节校园广播稿
2015/12/17 职场文书
MySQL索引篇之千万级数据实战测试
2021/04/05 MySQL
python神经网络编程之手写数字识别
2021/05/08 Python
详解Oracle数据库中自带的所有表结构(sql代码)
2021/11/20 Oracle
《仙剑客栈2》第一弹正式宣传片公开 年内发售
2022/04/07 其他游戏
Golang入门之计时器
2022/05/04 Golang