Android写一个简易计算器(可以实现连续计算)

发一个库存程序,好像是几个礼拜之前写的吧,是一个用安卓实现的简易的计算器,写这个小程序之前,看了很多人写的计算器,觉得使用一个 EditText,并将它设置为不可编写,是比较好的解决方案。

设计思路主要是: 根据用户的点击,在一个 EditText 中显示用户输入的运算步骤,例如 1 * 5 + 8 - 5 , 这个运算步骤首先是字符串类型的,然后在经过系列步骤将字符串解析成为相应的实数计算,最终得出结果

我是用了两个 EditText ,第一个显示运算步骤(字符串类型),第二个专门用了保存要参与运算的数字,并实时对这个数字进行更新;

对于:“操作数 操作运算符 操作数”,可以定义一个数组来保存这两操作数,进行运算之后,将结果存储到数组的第一个元素,方便进行连续运算,然后下一个操作数存储到数组的第二个元素,‘’‘’ 这样就实现了连续运算

在实现的过程当中,多处用到了类型转换,从字符串转换成浮点数,从浮点数转换成字符串等,进行类型转换是要特别小心,我就是因为类型转换是写错了,查bug查了老半天
效果图就是这样滴:
在这里插入图片描述
有几个小bug带修复:
1.运算没有优先级,完全是按用户输入的步骤来进行运算
2.连续按两次运算操作符会闪退,刚开始是按操作符也会闪退
3.其中的正负数转换按钮还没实行
由于最近要期中考试了,所以这几个小bug过一段时间再来修复,到时再更新
下面是代码:

MainActivity.java 文件

package com.example.calculator;

import android.content.Intent;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageButton;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity implements View.OnClickListener{

    getResult2 result2 = new getResult2();


    Button button0;
    Button button1;
    Button button2;
    Button button3;
    Button button4;
    Button button5;
    Button button6;
    Button button7;
    Button button8;
    Button button9;
    Button button_point;        //小数点
    Button button_clear;        //清空


    //2个imageButton
    Button button_plus;
    Button button_minus;
    Button button_mutiply;
    Button button_divide;
    ImageButton button_equal;        //等于
    ImageButton button_delete;       //删除(退格)

    EditText edit_input;        //输入框
    EditText editText2;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ActionBar actionBar = getSupportActionBar();
        if (actionBar != null) {
            actionBar.hide();
        }
        ImageButton imageButton1 = (ImageButton) findViewById(R.id.title_imageButton1);
        imageButton1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this, SetActivity.class);
                startActivity(intent);
            }
        });


        //实例化按钮
        button0 = (Button) findViewById(R.id.button0);
        button1 = (Button) findViewById(R.id.button1);
        button2 = (Button) findViewById(R.id.button2);
        button3 = (Button) findViewById(R.id.button3);
        button4 = (Button) findViewById(R.id.button4);
        button5 = (Button) findViewById(R.id.button5);
        button6 = (Button) findViewById(R.id.button6);
        button7 = (Button) findViewById(R.id.button7);
        button8 = (Button) findViewById(R.id.button8);
        button9 = (Button) findViewById(R.id.button9);
        button_point = (Button) findViewById(R.id.button_point);
        button_clear = (Button) findViewById(R.id.button_clear);
        button_plus = (Button) findViewById(R.id.button_plus);
        button_minus = (Button) findViewById(R.id.button_minus);
        button_mutiply = (Button) findViewById(R.id.button_mutiply);
        button_divide = (Button) findViewById(R.id.button_divide);
        button_equal = (ImageButton) findViewById(R.id.button_equal);
        button_delete = (ImageButton) findViewById(R.id.button_delete);
        edit_input = (EditText) findViewById(R.id.main_ediText);
        editText2 = (EditText) findViewById(R.id.edtiText2);

        //设置点击事件
        button0.setOnClickListener((View.OnClickListener) this);
        button1.setOnClickListener((View.OnClickListener) this);
        button2.setOnClickListener((View.OnClickListener) this);
        button3.setOnClickListener((View.OnClickListener) this);
        button4.setOnClickListener((View.OnClickListener) this);
        button5.setOnClickListener((View.OnClickListener) this);
        button6.setOnClickListener((View.OnClickListener) this);
        button7.setOnClickListener((View.OnClickListener) this);
        button8.setOnClickListener((View.OnClickListener) this);
        button9.setOnClickListener((View.OnClickListener) this);
        button_point.setOnClickListener((View.OnClickListener) this);
        button_clear.setOnClickListener((View.OnClickListener) this);
        button_plus.setOnClickListener((View.OnClickListener) this);
        button_minus.setOnClickListener((View.OnClickListener) this);
        button_mutiply.setOnClickListener((View.OnClickListener) this);
        button_divide.setOnClickListener((View.OnClickListener) this);
        button_equal.setOnClickListener((View.OnClickListener) this);
        button_delete.setOnClickListener((View.OnClickListener) this);
        button_clear.setOnClickListener((View.OnClickListener) this);

    }

    @Override
    public void onClick(View v) {

        //str用来保存第一个EditText中的字符串
        String str = edit_input.getText().toString();

        //str2用来保存第二个EditText中的字符串
        String str2 = editText2.getText().toString();

        switch (v.getId()) {
            case R.id.button0:
            case R.id.button1:
            case R.id.button2:
            case R.id.button3:
            case R.id.button4:
            case R.id.button5:
            case R.id.button6:
            case R.id.button7:
            case R.id.button8:
            case R.id.button9:
            case R.id.button_point:

                edit_input.setText(str + ((Button) v).getText());
                editText2.setText(str2 + ((Button) v).getText());
                break;

                // + - * / 对应的值依次为 1 2 3 4,将值传入setOperation中,就执行相应的运算
            case R.id.button_plus:

                result2.setNumber(editText2.getText().toString());   //设置操作数
                result2.getResult();
                result2.setOperation(1);
                edit_input.setText(str + " " + ((Button) v).getText() + " ");      //加上空格更美观
                str2 = "";
                editText2.setText(str2);       //清空textView
                break;
            case R.id.button_minus:

                result2.setNumber(editText2.getText().toString());   //设置操作数
                result2.getResult();
                result2.setOperation(2);

                edit_input.setText(str + " " + ((Button) v).getText() + " ");      //加上空格更美观
                str2 = "";
                editText2.setText(str2);       //清空textView
                break;
            case R.id.button_mutiply:

                result2.setNumber(editText2.getText().toString());   //设置操作数
                result2.getResult();
                result2.setOperation(3);                            //设置操作符

                edit_input.setText(str + " " + ((Button) v).getText() + " ");      //加上空格更美观
                str2 = "";
                editText2.setText(str2);       //清空textView
                break;
            case R.id.button_divide:

                result2.setNumber(editText2.getText().toString());   //设置操作数
                result2.getResult();
                result2.setOperation(4);

                edit_input.setText(str + " " + ((Button) v).getText() + " ");      //加上空格更美观
                str2 = "";
                editText2.setText(str2);       //清空textView
                break;

            case R.id.button_delete:

                if (str != null && !str.equals("")) {
                    //substring用来截取字符串的长度

                    if (str.substring(str.length() - 1, str.length()) == " ") {
                        //如果最后一个字符是空格,则删除最后两个字符,且eidtText2中字符串不发生变化
                        edit_input.setText(str.substring(0, str.length() - 2));
                    } else {
                        //如果最后一个字符是数字
                        edit_input.setText(str.substring(0, str.length() - 1));
                        //将EditText2中的字符取出,去掉最后一个字符之后再存入
                        String c2 = editText2.getText().toString();
                        String c3 = c2.substring(0, c2.length() - 1);
                        editText2.setText(c3);
                    }
                }
                break;
            case R.id.button_clear:
                result2.setDoubleA1(0);
                result2.setDoubleA2(0);
                result2.setA1(" ");
                result2.setA2(" ");
                edit_input.setText("");
                editText2.setText("");
                break;
            case R.id.button_equal:
                result2.setNumber(editText2.getText().toString());
                double r = result2.getResult();
                String r2 = String.valueOf(r);
                editText2.setText(r2);
                result2.setA1(" ");
                result2.setA2(" ");
                str2 = "";
                break;
        }
    }

activity_main.xml 文件:
这里我用的是线性布局,同样也可以用网格布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <include layout="@layout/title"/>
    <EditText
        android:id="@+id/main_ediText"
        android:editable="false"
        android:layout_weight="1"
        android:layout_width="match_parent"
        android:layout_height="0dp" />

    <EditText
        android:id="@+id/edtiText2"
        android:editable="false"
        android:layout_weight="1"
        android:layout_width="match_parent"
        android:layout_height="0dp" />

    <LinearLayout
        android:id="@+id/main_layout"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="4"
        android:background="#e4e4e4">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="1"
            android:background="#e4e4e4"
            tools:ignore="Suspicious0dp">

            <Button
                android:id="@+id/button_clear"
                android:text="C"
                android:textSize="30sp"
                android:textColor="#fff"
                android:background="#5fe1f2"
                android:layout_gravity="center"
                android:layout_marginTop="10dp"
                android:layout_marginRight="10dp"
                android:layout_marginLeft="10dp"
                android:layout_marginBottom="10dp"
                android:layout_weight="1"
                android:layout_width="0dp"
                android:layout_height="match_parent" />

            <ImageButton
                android:id="@+id/A_button2"
                android:scaleType="center"
                android:src="@drawable/imag1"
                android:background="#5fe1f2"
                android:layout_marginTop="10dp"
                android:layout_marginRight="10dp"
                android:layout_marginLeft="10dp"
                android:layout_marginBottom="10dp"
                android:layout_weight="1"
                android:layout_width="0dp"
                android:layout_height="match_parent" />

            <ImageButton
                android:id="@+id/button_delete"
                android:src="@drawable/imag2"
                android:textSize="24sp"
                android:layout_gravity="center"
                android:background="#5fe1f2"
                android:layout_marginTop="10dp"
                android:layout_marginRight="10dp"
                android:layout_marginLeft="10dp"
                android:layout_marginBottom="10dp"
                android:layout_weight="1"
                android:layout_width="0dp"
                android:layout_height="match_parent" />

            <Button
                android:id="@+id/button_plus"
                android:text="+"
                android:textSize="30sp"
                android:textColor="#fff"
                android:layout_gravity="center"
                android:gravity="center"
                android:background="#5fe1f2"
                android:layout_marginTop="10dp"
                android:layout_marginRight="10dp"
                android:layout_marginLeft="10dp"
                android:layout_marginBottom="10dp"
                android:layout_weight="1"
                android:layout_width="0dp"
                android:layout_height="match_parent" />


        </LinearLayout>

        <LinearLayout
            android:background="#e4e4e4"
            android:layout_weight="1"
            android:layout_width="match_parent"
            android:layout_height="0dp">

            <Button
                android:id="@+id/button7"
                android:text="7"
                android:textSize="30sp"
                android:textColor="#fff"
                android:background="#5fe1f2"
                android:layout_marginTop="10dp"
                android:layout_marginRight="10dp"
                android:layout_marginLeft="10dp"
                android:layout_marginBottom="10dp"
                android:layout_weight="1"
                android:layout_width="0dp"
                android:layout_height="match_parent" />

            <Button
                android:id="@+id/button8"
                android:textSize="30sp"
                android:textColor="#fff"
                android:text="8"
                android:background="#5fe1f2"
                android:layout_marginTop="10dp"
                android:layout_marginRight="10dp"
                android:layout_marginLeft="10dp"
                android:layout_marginBottom="10dp"
                android:layout_weight="1"
                android:layout_width="0dp"
                android:layout_height="match_parent" />

            <Button
                android:id="@+id/button9"
                android:text="9"
                android:textColor="#fff"
                android:textSize="30sp"
                android:background="#5fe1f2"
                android:layout_marginTop="10dp"
                android:layout_marginRight="10dp"
                android:layout_marginLeft="10dp"
                android:layout_marginBottom="10dp"
                android:layout_weight="1"
                android:layout_width="0dp"
                android:layout_height="match_parent" />



            <Button
                android:id="@+id/button_minus"
                android:text="-"
                android:textColor="#fff"
                android:textSize="30sp"
                android:gravity="center"
                android:background="#5fe1f2"
                android:layout_marginTop="10dp"
                android:layout_marginRight="10dp"
                android:layout_marginLeft="10dp"
                android:layout_marginBottom="10dp"
                android:layout_weight="1"
                android:layout_width="0dp"
                android:layout_height="match_parent" />

        </LinearLayout>

        <LinearLayout
            android:background="#e4e4e4"
            android:layout_weight="1"
            android:layout_width="match_parent"
            android:layout_height="0dp">

            <Button
                android:id="@+id/button4"
                android:text="4"
                android:textSize="30sp"
                android:textColor="#fff"
                android:background="#5fe1f2"
                android:layout_marginTop="10dp"
                android:layout_marginRight="10dp"
                android:layout_marginLeft="10dp"
                android:layout_marginBottom="10dp"
                android:layout_weight="1"
                android:layout_width="0dp"
                android:layout_height="match_parent" />

            <Button
                android:id="@+id/button5"
                android:text="5"
                android:textSize="30sp"
                android:textColor="#fff"
                android:background="#5fe1f2"
                android:layout_marginTop="10dp"
                android:layout_marginRight="10dp"
                android:layout_marginLeft="10dp"
                android:layout_marginBottom="10dp"
                android:layout_weight="1"
                android:layout_width="0dp"
                android:layout_height="match_parent" />

            <Button
                android:id="@+id/button6"
                android:text="6"
                android:textSize="30sp"
                android:textColor="#fff"
                android:background="#5fe1f2"
                android:layout_marginTop="10dp"
                android:layout_marginRight="10dp"
                android:layout_marginLeft="10dp"
                android:layout_marginBottom="10dp"
                android:layout_weight="1"
                android:layout_width="0dp"
                android:layout_height="match_parent" />

            <Button
                android:id="@+id/button_mutiply"
                android:text="*"
                android:textColor="#fff"
                android:textSize="30sp"
                android:background="#5fe1f2"
                android:layout_marginTop="10dp"
                android:layout_marginRight="10dp"
                android:layout_marginLeft="10dp"
                android:layout_marginBottom="10dp"
                android:layout_weight="1"
                android:layout_width="0dp"
                android:layout_height="match_parent" />




        </LinearLayout>

        <LinearLayout
            android:background="#e4e4e4"
            android:layout_weight="1"
            android:layout_width="match_parent"
            android:layout_height="0dp">

            <Button
                android:id="@+id/button1"
                android:text="1"
                android:textSize="30sp"
                android:textColor="#fff"
                android:background="#5fe1f2"
                android:layout_marginTop="10dp"
                android:layout_marginRight="10dp"
                android:layout_marginLeft="10dp"
                android:layout_marginBottom="10dp"
                android:layout_weight="1"
                android:layout_width="0dp"
                android:layout_height="match_parent" />

            <Button
                android:id="@+id/button2"
                android:text="2"
                android:textSize="30sp"
                android:textColor="#fff"
                android:background="#5fe1f2"
                android:layout_marginTop="10dp"
                android:layout_marginRight="10dp"
                android:layout_marginLeft="10dp"
                android:layout_marginBottom="10dp"
                android:layout_weight="1"
                android:layout_width="0dp"
                android:layout_height="match_parent" />

            <Button
                android:id="@+id/button3"
                android:text="4"
                android:textSize="30sp"
                android:textColor="#fff"
                android:background="#5fe1f2"
                android:layout_marginTop="10dp"
                android:layout_marginRight="10dp"
                android:layout_marginLeft="10dp"
                android:layout_marginBottom="10dp"
                android:layout_weight="1"
                android:layout_width="0dp"
                android:layout_height="match_parent" />

            <Button
                android:id="@+id/button_divide"
                android:text="/"
                android:textColor="#fff"
                android:textSize="24sp"
                android:background="#5fe1f2"
                android:layout_marginTop="10dp"
                android:layout_marginRight="10dp"
                android:layout_marginLeft="10dp"
                android:layout_marginBottom="10dp"
                android:layout_weight="1"
                android:layout_width="0dp"
                android:layout_height="match_parent" />


        </LinearLayout>

        <LinearLayout
            android:layout_weight="1"
            android:layout_width="match_parent"
            android:layout_height="0dp">

            <Button
                android:id="@+id/button0"
                android:text="0"
                android:textSize="30sp"
                android:textColor="#fff"
                android:background="#5fe1f2"
                android:layout_marginTop="10dp"
                android:layout_marginRight="10dp"
                android:layout_marginLeft="10dp"
                android:layout_marginBottom="10dp"
                android:layout_weight="2"
                android:layout_width="0dp"
                android:layout_height="match_parent" />

            <Button
                android:id="@+id/button_point"
                android:text="."
                android:textSize="30sp"
                android:textColor="#fff"
                android:background="#5fe1f2"
                android:layout_marginTop="10dp"
                android:layout_marginRight="10dp"
                android:layout_marginLeft="10dp"
                android:layout_marginBottom="10dp"
                android:layout_weight="1"
                android:layout_width="0dp"
                android:layout_height="match_parent" />



            <ImageButton
                android:id="@+id/button_equal"
                android:src="@drawable/imag8"
                android:background="#5fe1f2"
                android:layout_marginTop="10dp"
                android:layout_marginRight="10dp"
                android:layout_marginLeft="10dp"
                android:layout_marginBottom="10dp"
                android:layout_weight="1"
                android:layout_width="0dp"
                android:layout_height="match_parent" />

        </LinearLayout>

    </LinearLayout>

</LinearLayout>

getResult2.java 文件
还有一个getResult2 类,用来获得运算之后的结果

package com.example.calculator;

public class getResult2 {

    private String a1;         //第一位操作数
    private double doubleA1;            //实际参与运算

    private String a2;         //第二位操作数
    private double doubleA2;        //实际参与运算

    private int operation;         //运算符

    double result;      //结果

    //构造函数
    getResult2() {
        a1 = " ";
        a2 = " ";
        operation = 0;
    }

    void setA1(String A1) {
        a1 = A1;
    }

    void setA2(String A2) {
        a2 = A2;
    }

    void setDoubleA1(double x) {
        doubleA1 = x;
    }

    void setDoubleA2(double y) {
        doubleA2 = y;
    }
    //设置操作数,同时将字符串转换成数字,如果带小数点,转换成浮点数,否则转换成整数
    public void setNumber(String x) {
        if (a1.equals(" ")) {
            a1 = x;
            if (a1.contains(".")) {
                doubleA1 = Double.parseDouble(a1);
            } else {
                doubleA1 = Integer.parseInt(a1);
            }
        } else {
            a2 = x;
            if (a2.contains(".")) {
                doubleA2 = Double.parseDouble(a2);
            } else {
                doubleA2 = Integer.parseInt(a2);
            }
        }
    }

    public void setOperation(int i) {
        operation = i;
    }

    //进行运算,得到结果,同时将结果赋值给第一位操作数
    public double getResult() {
        if (operation == 1) {
            if (!a1.equals(" ") && a2.equals(" ")) {
                return 0;
            } else {
                result = doubleA1  + doubleA2;
                a1 = String.valueOf(result);
                doubleA1 = result;
                a2 = " ";
            }

        } else if (operation == 2) {
            if (!a1.equals("") && a2.equals("")) {
                return 0;
            } else {
                result = doubleA1  - doubleA2;
                a1 = String.valueOf(result);
                doubleA1 = result;
                a2 = " ";
            }
        } else if (operation == 3) {
            if (!a1.equals(" ") && a2.equals(" ")) {
                return 0;
            } else {
                result = doubleA1  * doubleA2;
                a1 = String.valueOf(result);
                doubleA1 = result;
                a2 = " ";
            }
        } else if (operation == 4) {
            if (!a1.equals(" ") && a2.equals(" ")) {
                return 0;
            } else {
                result = doubleA1  / doubleA2;
                a1 = String.valueOf(result);
                doubleA1 = result;
                a2 = " ";
            }
        }
        return result;
    }
}


版权声明:本文为Linkai12138原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。