简单计算器实现

(安卓学习笔记)安卓实现简单计算器

功能模块代码

package com.example.lesson3_pre;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

/*
类名:MainActivity
功能描述:实例化计算器的各个按钮;完成计算器界面设计;处理点击各个按钮后的事件,完成简单计算的功能
JDK版本:1.8
创建日期:2020年2月27日10:43:48
 */
public class MainActivity extends AppCompatActivity {
    private Button btnC, btnDel, btnDev, btnAdd, btnSub, btnMul, btnEqu, btnPoi;
    private TextView txtResult;
    private TextView txtCal;
    private StringBuffer digtalA = new StringBuffer(), digtalB = new StringBuffer(), digtalC = new StringBuffer();
    private boolean isChar = false;
    private int operator = 0;
    private boolean isdigtalA = true;

    /*
    方法名:onCreate()
    参数名:savedInstanceState
    功能描述:以key-value的形式储存数据,用来保存Activity的状态
     */
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate( savedInstanceState );
        this.setContentView( R.layout.calc );
        initView();

        //加法绑定的监听事件,operator=0为点击的是加号
        btnAdd.setOnClickListener( new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (digtalA.length() == 0) {
                    return;
                }
                operator = 0;
                isChar = true;
                isdigtalA = false;
                digtalC.append( "+" );
                txtCal.setText( digtalC.toString() );
            }
        } );

        //减法绑定的监听事件
        btnSub.setOnClickListener( new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (digtalA.length() == 0) {
                    return;
                }
                operator = 1;
                isChar = true;
                isdigtalA = false;
                digtalC.append( "-" );
                txtCal.setText( digtalC.toString() );
            }
        } );

        //乘法绑定的监听事件
        btnMul.setOnClickListener( new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (digtalA.length() == 0) {
                    return;
                }
                operator = 2;
                isChar = true;
                isdigtalA = false;
                digtalC.append( "×" );
                txtCal.setText( digtalC.toString() );
            }
        } );

        //除法绑定的监听事件
        btnDev.setOnClickListener( new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (digtalA.length() == 0) {
                    return;
                }
                operator = 3;
                isChar = true;
                isdigtalA = false;
                digtalC.append( "÷" );
                txtCal.setText( digtalC.toString() );
            }
        } );

        //回退键绑定的监听事件
        btnDel.setOnClickListener( new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if (digtalC.length() > 0) {

                    //截取缓存C中的子串
                    String temp = digtalC.substring( 0, digtalC.length() - 1 );

                    digtalC = new StringBuffer();
                    digtalC.append( temp );
                    txtCal.setText( temp );
                }
                if (isdigtalA) {
                    if (digtalA.length() > 0) {
                        String temp = digtalA.substring( 0, digtalA.length() - 1 );
                        digtalA = new StringBuffer();
                        digtalA.append( temp );
                    } else {
                        digtalA = new StringBuffer();
                        digtalA.append( "0" );
                    }
                } else {
                    if (digtalB.length() > 0) {
                        String temp = digtalB.substring( 0, digtalB.length() - 1 );
                        digtalB = new StringBuffer();
                        digtalB.append( temp );
                        txtCal.setText( temp );
                    } else {
                        digtalB = new StringBuffer();
                        digtalB.append( "0" );
                        txtCal.setText( digtalB.toString() );
                    }
                }
            }
        } );

        //清零键绑定的监听事件
        btnC.setOnClickListener( new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                if (isdigtalA) {
                    digtalA = new StringBuffer();
                } else {
                    digtalB = new StringBuffer();
                }
                digtalC = new StringBuffer();
                txtCal.setText( "0" );
                txtResult.setText( "0" );
            }
        } );

        //点击“=”后的事件处理
        btnEqu.setOnClickListener( new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                //如果运算符之前和之后的数字有一个为0,则不进行操作
                if (digtalA.length() == 0 || digtalB.length() == 0) {
                    return;
                }

                //将缓存中的数字由字符长类型转换为浮点数类型
                float a = Float.parseFloat( digtalA.toString() );
                float b = Float.parseFloat( digtalB.toString() );
                float c = 0;
                switch (operator) {
                    case 0:
                        c = a + b;
                        break;
                    case 1:
                        c = a - b;
                        break;
                    case 2:
                        c = a * b;
                        break;
                    case 3:
                        c = a / b;
                        break;
                }

                //以字符串类型输出结果,并将缓存中的数字和运算符清除
                txtResult.setText( c + "" );
                digtalA = new StringBuffer();
                digtalB = new StringBuffer();
                digtalC = new StringBuffer();
                isChar = false;
            }
        } );
    }

    //初始化界面
    void initView() {
        txtCal = this.findViewById( R.id.txtCal );
        txtResult = this.findViewById( R.id.txtResult );
        btnC = this.findViewById( R.id.btnC );
        btnDel = this.findViewById( R.id.btnDel );
        btnDev = this.findViewById( R.id.btnDev );
        btnAdd = this.findViewById( R.id.btnAdd );
        btnSub = this.findViewById( R.id.btnSub );
        btnMul = this.findViewById( R.id.btnMul );
        btnEqu = this.findViewById( R.id.btnEqu );
    }

    //定义一个单击方法,绑定1,2,3,4,5,6,7,8,9,.按钮的监听事件
    public void myClick(View view) {
        switch (view.getId()) {
            case R.id.btn0:
                digtalC.append( "0" );
                txtCal.setText( digtalC.toString() );
                if (isChar) {
                    digtalB.append( "0" );
                } else {
                    digtalA.append( "0" );
                }
                break;
            case R.id.btn1:
                digtalC.append( "1" );
                txtCal.setText( digtalC.toString() );
                if (isChar) {
                    digtalB.append( "1" );
                } else {
                    digtalA.append( "1" );
                }
                break;
            case R.id.btn2:
                digtalC.append( "2" );
                txtCal.setText( digtalC.toString() );
                if (isChar) {
                    digtalB.append( "2" );
                } else {
                    digtalA.append( "2" );
                }
                break;
            case R.id.btn3:
                digtalC.append( "3" );
                txtCal.setText( digtalC.toString() );
                if (isChar) {
                    digtalB.append( "3" );
                    ;
                } else {
                    digtalA.append( "3" );
                }
                break;
            case R.id.btn4:
                digtalC.append( "4" );
                txtCal.setText( digtalC.toString() );
                if (isChar) {
                    digtalB.append( "4" );

                } else {
                    digtalA.append( "4" );
                }
                break;
            case R.id.btn5:
                digtalC.append( "5" );
                txtCal.setText( digtalC.toString() );
                if (isChar) {
                    digtalB.append( "5" );
                } else {
                    digtalA.append( "5" );
                }
                break;
            case R.id.btn6:
                digtalC.append( "6" );
                txtCal.setText( digtalC.toString() );
                if (isChar) {
                    digtalB.append( "6" );
                } else {
                    digtalA.append( "6" );
                }
                break;
            case R.id.btn7:
                digtalC.append( "7" );
                txtCal.setText( digtalC.toString() );
                if (isChar) {
                    digtalB.append( "7" );
                } else {
                    digtalA.append( "7" );
                }
                break;
            case R.id.btn8:
                digtalC.append( "8" );
                txtCal.setText( digtalC.toString() );
                if (isChar) {
                    digtalB.append( "8" );
                } else {
                    digtalA.append( "8" );
                }
                break;
            case R.id.btn9:
                digtalC.append( "9" );
                txtCal.setText( digtalC.toString() );
                if (isChar) {
                    digtalB.append( "9" );
                } else {
                    digtalA.append( "9" );
                }
                break;
            case R.id.btnPoi:
                digtalC.append( "." );
                txtCal.setText( digtalC.toString() );
                if (isChar) {
                    digtalB.append( "." );
                } else {
                    digtalA.append( "." );
                }
                break;
        }
    }
}

视图模块代码

<?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">

    <TextView
        android:id="@+id/txtCal"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="right"
        android:text="计算"
        android:textSize="25dp" />

    <TextView
        android:id="@+id/txtResult"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:gravity="right"
        android:text="显示结果"
        android:textSize="50dp" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <Button
            android:id="@+id/btnC"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:onClick="myClick"
            android:text="C" />

        <Button
            android:id="@+id/btnDel"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="2"
            android:onClick="myClick"
            android:text="DEL" />

        <Button
            android:id="@+id/btnDev"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:onClick="myClick"
            android:text="÷" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <Button
            android:id="@+id/btn1"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:onClick="myClick"
            android:text="1" />

        <Button
            android:id="@+id/btn2"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:onClick="myClick"
            android:text="2" />

        <Button
            android:id="@+id/btn3"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:onClick="myClick"
            android:text="3" />

        <Button
            android:id="@+id/btnAdd"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:onClick="myClick"
            android:text="+" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <Button
            android:id="@+id/btn4"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:onClick="myClick"
            android:text="4" />

        <Button
            android:id="@+id/btn5"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:onClick="myClick"
            android:text="5" />

        <Button
            android:id="@+id/btn6"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:onClick="myClick"
            android:text="6" />

        <Button
            android:id="@+id/btnSub"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:onClick="myClick"
            android:text="-" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="horizontal">

        <Button
            android:id="@+id/btn7"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:onClick="myClick"
            android:text="7" />

        <Button
            android:id="@+id/btn8"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:onClick="myClick"
            android:text="8" />

        <Button
            android:id="@+id/btn9"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:onClick="myClick"
            android:text="9" />

        <Button
            android:id="@+id/btnMul"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:onClick="myClick"
            android:text="×" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="20dp"
        android:orientation="horizontal">

        <Button
            android:id="@+id/btn0"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:onClick="myClick"
            android:text="0" />

        <Button
            android:id="@+id/btnPoi"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:onClick="myClick"
            android:text="." />

        <Button
            android:id="@+id/btnEqu"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="2"
            android:onClick="myClick"
            android:text="=" />
    </LinearLayout>
</LinearLayout>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值