欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android实现简单计算器

程序员文章站 2022-03-10 09:11:36
本文实例为大家分享了android实现简单计算器的具体代码,供大家参考,具体内容如下功能1、加减乘除四则运算2、归03、回退4、即时运算配置在build.gradle(app) 中加入下面的代码bui...

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

功能

1、加减乘除四则运算
2、归0
3、回退
4、即时运算

配置

在build.gradle(app) 中加入下面的代码

buildfeatures {
        viewbinding = true
    }

加入位置如下所示

compileoptions {
        sourcecompatibility javaversion.version_1_8
        targetcompatibility javaversion.version_1_8
    }
buildfeatures {
    viewbinding = true
}

布局

Android实现简单计算器

<?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"
    >
    <textview
        android:id="@+id/tv"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="4"
        android:layout_margin="5dp"
        android:text="计算器\nby csdn weixin_44423317 "
        android:textsize="20sp"
        android:gravity="right|center"
        android:padding="6dp"
        />
    <view
        android:layout_width="match_parent"
        android:layout_height="2dp"
        android:layout_marginleft="1dp"
        android:layout_marginright="1dp"
        android:background="#adadad"/>
    <linearlayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="8"
        android:orientation="vertical"
        android:gravity="center_horizontal"
        >
        <linearlayout
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:orientation="horizontal">
            <button
                android:id="@+id/ac"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:layout_weight="1"
                android:textsize="20sp"
                android:textcolor="@color/black"
                android:text="ac"
                android:background="@color/white"/>
            <button
                android:layout_weight="1"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:background="#00ffffff"/>
            <button
                android:layout_weight="1"
                android:layout_width="0dp"
                android:layout_height="match_parent"
                android:background="#00ffffff"/>
            <imagebutton
                android:id="@+id/dec"
                android:layout_width="0dp"
                android:layout_weight="1"
                android:layout_height="match_parent"
                android:textsize="20sp"
                android:textcolor="@color/black"
                android:layout_gravity="right"
                android:background="@color/white"
                android:src="@drawable/ic_baseline_backspace_24"/>
        </linearlayout>
        <linearlayout
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:orientation="horizontal">
            <button
                android:id="@+id/qi"
                android:layout_width="0dp"
                android:layout_weight="1"
                android:layout_height="match_parent"
                android:textsize="20sp"
                android:textcolor="@color/black"
                android:text="7"
                android:background="@color/white"/>
            <button
                android:id="@+id/ba"
                android:layout_width="0dp"
                android:layout_weight="1"
                android:layout_height="match_parent"
                android:textsize="20sp"
                android:textcolor="@color/black"
                android:text="8"
                android:background="@color/white"/>
            <button
                android:id="@+id/jiu"
                android:layout_width="0dp"
                android:layout_weight="1"
                android:layout_height="match_parent"
                android:textcolor="@color/black"
                android:text="9"
                android:textsize="20sp"
                android:background="@color/white"/>
            <button
                android:id="@+id/mul"
                android:layout_width="0dp"
                android:layout_weight="1"
                android:layout_height="match_parent"
                android:textsize="20sp"
                android:textcolor="@color/black"
                android:text="x"
                android:background="@color/white"/>
        </linearlayout>
        <linearlayout
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:orientation="horizontal">
            <button
                android:id="@+id/si"
                android:layout_width="0dp"
                android:layout_weight="1"
                android:textsize="20sp"
                android:layout_height="match_parent"
                android:textcolor="@color/black"
                android:text="4"
                android:background="@color/white"/>
            <button
                android:id="@+id/wu"
                android:textsize="20sp"
                android:layout_width="0dp"
                android:layout_weight="1"
                android:layout_height="match_parent"
                android:textcolor="@color/black"
                android:text="5"
                android:background="@color/white"/>
            <button
                android:id="@+id/liu"
                android:textsize="20sp"
                android:layout_width="0dp"
                android:layout_weight="1"
                android:layout_height="match_parent"
                android:textcolor="@color/black"
                android:text="6"
                android:background="@color/white"/>
            <button
                android:id="@+id/div"
                android:layout_width="0dp"
                android:layout_weight="1"
                android:textsize="20sp"
                android:layout_height="match_parent"
                android:textcolor="@color/black"
                android:text="/"
                android:background="@color/white"/>
        </linearlayout>
        <linearlayout
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:orientation="horizontal">
            <button
                android:id="@+id/yi"
                android:layout_width="0dp"
                android:layout_weight="1"
                android:textsize="20sp"
                android:layout_height="match_parent"
                android:textcolor="@color/black"
                android:text="1"
                android:background="@color/white"/>
            <button
                android:id="@+id/er"
                android:layout_width="0dp"
                android:layout_weight="1"
                android:layout_height="match_parent"
                android:textsize="20sp"
                android:textcolor="@color/black"
                android:text="2"
                android:background="@color/white"/>
            <button
                android:id="@+id/san"
                android:layout_width="0dp"
                android:layout_weight="1"
                android:layout_height="match_parent"
                android:textcolor="@color/black"
                android:textsize="20sp"
                android:text="3"
                android:background="@color/white"/>
            <button
                android:id="@+id/sub"
                android:layout_width="0dp"
                android:layout_weight="1"
                android:layout_height="match_parent"
                android:textcolor="@color/black"
                android:textsize="20sp"
                android:text="-"
                android:background="@color/white"/>
        </linearlayout>
        <linearlayout
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:orientation="horizontal">
            <button
                android:id="@+id/zero"
                android:layout_width="0dp"
                android:layout_weight="1"
                android:layout_height="match_parent"
                android:textcolor="@color/black"
                android:textsize="20sp"
                android:text="0"
                android:background="@color/white"/>
            <button
                android:id="@+id/point"
                android:layout_width="0dp"
                android:layout_weight="1"
                android:layout_height="match_parent"
                android:textcolor="@color/black"
                android:textsize="20sp"
                android:text="."
                android:background="@color/white"/>
            <button
                android:id="@+id/equal"
                android:layout_width="0dp"
                android:layout_weight="1"
                android:layout_height="match_parent"
                android:textcolor="@color/black"
                android:textsize="20sp"
                android:text="="
                android:background="@color/white"/>
            <button
                android:id="@+id/add"
                android:layout_width="0dp"
                android:layout_weight="1"
                android:layout_height="match_parent"
                android:textcolor="@color/black"
                android:textsize="20sp"
                android:text="+"
                android:background="@color/white"/>
        </linearlayout>
    </linearlayout>
</linearlayout>

代码

public class mainactivity extends appcompatactivity implements view.onclicklistener {
    private string tv="0";
    private activitymainbinding inflate;
    private string count="";
    private boolean ismax=false;
    @override
    protected void oncreate(bundle savedinstancestate) {
        super.oncreate(savedinstancestate);
        inflate = activitymainbinding.inflate(getlayoutinflater());
        setcontentview(inflate.getroot());
        inflate.zero.setonclicklistener(this);
        inflate.yi.setonclicklistener(this);
        inflate.er.setonclicklistener(this);
        inflate.san.setonclicklistener(this);
        inflate.si.setonclicklistener(this);
        inflate.wu.setonclicklistener(this);
        inflate.liu.setonclicklistener(this);
        inflate.qi.setonclicklistener(this);
        inflate.ba.setonclicklistener(this);
        inflate.jiu.setonclicklistener(this);
        inflate.add.setonclicklistener(this);
        inflate.sub.setonclicklistener(this);
        inflate.mul.setonclicklistener(this);
        inflate.div.setonclicklistener(this);
        inflate.point.setonclicklistener(this);
        inflate.equal.setonclicklistener(this);
        inflate.dec.setonclicklistener(this);
        inflate.ac.setonclicklistener(this);
    }
    private void jisuanqi(){
        list<string> strs=new arraylist<>();
        stringbuilder f= new stringbuilder();
        for(int i=0;i<tv.length();i++) {
            if(string.valueof(tv.charat(i)).equals("-")) {
                if(!f.tostring().equals("")){
                    strs.add(f.tostring());
                    strs.add("-");
                    f = new stringbuilder();
                }else{
                    f.append("-");
                }
                continue;
            }
            if(string.valueof(tv.charat(i)).matches("(\\d+)|(\\.)")) {
                f.append(string.valueof(tv.charat(i)));
            }else {
                strs.add(f.tostring());
                strs.add(string.valueof(tv.charat(i)));
                f = new stringbuilder();
            }
        }
        if(!f.tostring().equals("")) {
            strs.add(f.tostring());
        }
        if(!strs.get(strs.size()-1).matches("(\\-|)?\\d+(\\.\\d*)?$")){
            strs.remove(strs.size()-1);
        }
        double ans=number(strs,0);
        if(ans==0||ans%(int)ans==0){
            count=(int)ans+"";
        }else {
            bigdecimal bigdecimal=new bigdecimal(ans);
            string a=bigdecimal.setscale(12,5).tostring();
            if(ans-(int)ans!=0) {
                while (string.valueof(a.charat(a.length() - 1)).equals("0")){
                    a=a.substring(0,a.length()-1);
                }
            }
            count=a;
        }
        if(ismax){
            ismax=false;
            count="∞";
        }
        showtext();
    }
    private void showtext(){
        inflate.tv.settext(tv);
        spannablestring spantext  =  new spannablestring(count);
        spantext.setspan(new absolutesizespan(30, true), 0, spantext.length(),
                spannable.span_exclusive_exclusive);
        inflate.tv.append("\n");
        inflate.tv.append(spantext);
    }
    private double number(list<string> n,int v) {
        double con = 0;
        int j=0;
        con=double.valueof(n.get(0));
        if(v==0) {
            for(int i=0;i<n.size();i++) {
                if(n.get(i).matches("(\\-|)?\\d+(\\.\\d+)?$")) {//55+5*5/5-5=
                    con=double.valueof(n.get(i));
                    if(n.size()>i+1) {
                        j=i+1;
                    }
                }
                if(n.get(j).equals("x")){
                    n.set(i, string.valueof(con*double.valueof(n.get(i+2))));
                    n.remove(i+1);
                    n.remove(i+1);
                    return number(n,0);
                }else if(n.get(j).equals("/")){
                    if(double.valueof(n.get(i+2))==0){
                        ismax=true;
                        return 10;
                    }
                    n.set(i, string.valueof(con/double.valueof(n.get(i+2))));
                    n.remove(i+1);
                    n.remove(i+1);
                    return number(n,0);
                }
            }
        }
        for(int i=0;i<n.size();i++) {
            if(n.get(i).matches("(\\-|)?\\d+(\\.\\d+)?$")) {//55+5*5/5-5=
                con=double.valueof(n.get(i));
                if(n.size()>i+1) {
                    j=i+1;
                }
            }
            if(n.get(j).equals("+")){
                n.set(i, string.valueof(con+double.valueof(n.get(i+2))));
                n.remove(i+1);
                n.remove(i+1);
                return number(n,1);

            }else if(n.get(j).equals("-")){
                n.set(i, string.valueof(con-double.valueof(n.get(i+2))));
                n.remove(i+1);
                n.remove(i+1);
                return number(n,1);
            }

        }
        return con;
    }

    @suppresslint("nonconstantresourceid")
    @override
    public void onclick(view v) {

        switch (v.getid()){
            case r.id.point:
                if(string.valueof(tv.charat(tv.length()-1)).matches("\\d+")){
                    tv+=".";
                    inflate.tv.settext(tv);
                }
                break;
            case r.id.zero:
            case r.id.yi:
            case r.id.er:
            case r.id.san:
            case r.id.si:
            case r.id.wu:
            case r.id.liu:
            case r.id.qi:
            case r.id.ba:
            case r.id.jiu:
                if(tv.equals("0")){
                    tv="";
                }
                button bt_digit=findviewbyid(v.getid());
                tv+=bt_digit.gettext();
                inflate.tv.settext(tv);
                count=tv;
                jisuanqi();
                break;
            case r.id.sub:
                if(string.valueof(tv.charat(0)).equals("0")){
                    tv="-";
                }else {
                    if(string.valueof(tv.charat(tv.length()-1)).equals(".")){
                        tv += "0";
                    }
                    tv+="-";
                }
                showtext();
                break;
            case r.id.add:
            case r.id.mul:
            case r.id.div:
                button bt_operator=findviewbyid(v.getid());
                string laststr=string.valueof(tv.charat(tv.length()-1));
                if(!laststr.matches("(\\d+)") ) {
                    tv = tv.substring(0, tv.length() - 1) + bt_operator.gettext();
                }else {
                    if(laststr.equals(".")) {
                        tv += "0";
                    }
                    tv+=bt_operator.gettext();
                }

                showtext();
                break;
            case r.id.ac:
                tv="0";
                inflate.tv.settext(tv);
                break;
            case r.id.dec:
                if(tv.length()>1) {
                    tv = tv.substring(0, tv.length() - 1);
                }else {
                    tv="0";
                }
                jisuanqi();
                break;
            case r.id.equal:
                if(!string.valueof(tv.charat(tv.length()-1)).matches("(\\d+)")){
                    tv = tv.substring(0, tv.length() - 1);
                }
                count=tv;
                jisuanqi();
                tv=count;
                inflate.tv.settext(tv);
                break;
        }
    }
 }

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

相关标签: Android 计算器