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

Android-简易计算器

程序员文章站 2022-03-10 16:11:46
文章目录布局(activity_main.xml)响应及计算(MainActivity)测试布局(activity_main.xml)

布局(activity_main.xml)

<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
            xmlns:tools="http://schemas.android.com/tools"
            android:id="@+id/GridLayout1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:columnCount="4"
            android:orientation="horizontal"
            android:rowCount="6" >

    <EditText
            android:id="@+id/editText"
            android:layout_columnSpan="4"
            android:layout_gravity="fill"
            android:layout_marginLeft="5dp"
            android:layout_marginRight="5dp"
            android:text="0"
            android:textSize="50sp" />



    <Button
            android:id="@+id/clear"
            android:layout_columnSpan="1"
            android:layout_gravity="fill"
            android:text="清空"
            android:textColor="#FF4500"

    />

    <Button
            android:id="@+id/back"
            android:layout_columnSpan="1"
            android:layout_gravity="fill"
            android:text="回退"
            android:textColor="#FF4500"

    />

    <Button
            android:id="@+id/per"
            android:text="%"
            android:textColor="#FF4500"

    />

    <Button
            android:id="@+id/div"
            android:text="÷"
            android:textColor="#FF4500"

    />

    <Button
            android:id="@+id/b7"
            android:text="7"

    />

    <Button
            android:id="@+id/b8"
            android:text="8"
    />

    <Button
            android:id="@+id/b9"
            android:text="9"
    />

    <Button
            android:id="@+id/mul"
            android:text="×"
            android:textColor="#FF4500"
    />

    <Button
            android:id="@+id/b4"
            android:text="4"
    />

    <Button
            android:id="@+id/b5"
            android:text="5"
    />

    <Button
            android:id="@+id/b6"
            android:text="6"
    />

    <Button
            android:id="@+id/sub"
            android:text="-"
            android:textColor="#FF4500"

    />

    <Button
            android:id="@+id/b1"
            android:text="1"
    />

    <Button
            android:id="@+id/b2"
            android:text="2"
    />

    <Button
            android:id="@+id/b3"
            android:text="3"
    />

    <Button
            android:id="@+id/plus"
            android:layout_width="wrap_content"
            android:text="+"
            android:textColor="#FF4500"

    />

    <Button
            android:id="@+id/b00"
            android:text="00"
    />
    <Button
            android:id="@+id/b0"
            android:text="0"
    />
    <Button
            android:id="@+id/dot"
            android:text="."
    />

    <Button
            android:id="@+id/equ"
            android:text="="
            android:background="#008B8B"
    />

</GridLayout>

响应及计算(MainActivity)

package com.mylayout;

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


public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private EditText editText;

    //数字0-9
    private Button b1;
    private Button b2;
    private Button b3;
    private Button b4;
    private Button b5;
    private Button b6;
    private Button b7;
    private Button b8;
    private Button b9;
    private Button b0;
    private Button b00;

    //运算符
    private  Button per;
    private  Button add;// +
    private  Button sub;  // -
    private  Button mul;  // *
    private  Button div;  // /
    private  Button dot;  //小数点
    private  Button equ;  // =
    
    private boolean back; //退格

    private boolean clear_bool= true;//清空
    private boolean dot_flag1 = true;
    private boolean dot_flag2 = true;

    @Override
    public void onClick(View view) {

        String input = editText.getText().toString();
        switch (view.getId()){

            case R.id.b0:
            case R.id.b1:
            case R.id.b2:
            case R.id.b3:
            case R.id.b4:
            case R.id.b5:
            case R.id.b6:
            case R.id.b7:
            case R.id.b8:
            case R.id.b9:
            case R.id.b00:
                 if(dot_flag1)dot_flag2 = true;
                 if(clear_bool)
                 {
                     clear_bool = false;
                     editText.setText(""+((Button)view).getText());
                 }
                 else
                 {
                     editText.setText(input + ((Button)view).getText());//结果集就为本身
                 }
                break;
            case R.id.dot:
                  if(dot_flag1&&dot_flag2)
                  {
                      dot_flag1 = false;
                      dot_flag2 = false;
                      editText.setText(input + ((Button)view).getText());
                  }
                  break;
            case R.id.per:
            case R.id.plus:
            case R.id.sub:
            case R.id.mul:
            case R.id.div:
                dot_flag1 = true;
                if(clear_bool)
                {
                    clear_bool = false;
                    input = "";
                    editText.setText("");
                }
                editText.setText(input + ((Button)view).getText()+" ");
                break;
            case R.id.back:   //退格
                if(input != null || !input.equals("")) {
                   if(input.length()>1) {
                       editText.setText(input.substring(0, input.length() - 1));//
                   }
                   else{
                       clear_bool =true;
                       editText.setText("0");
                   }


                }
                break;
            case R.id.clear: //清空
                editText.setText("0");
                clear_bool = true;
                break;
            case R.id.equ:
                calculation();
                break;
        }


    }

    //计算结果
    private void calculation() {
        String s1 = editText.getText().toString();         //获取字符串
        if (s1 == null){
            return;
        }
        boolean flag = false;
        if(s1.charAt(0)=='-')
        {
            s1 = s1.substring(1);
            flag = true;
        }
        String []num = s1.split("[-÷×+]");     //分割字符串获得各个数字
        double []n = new double[num.length];
        for(int i=0;i<num.length;i++)        //字符串转数字
        {
            if(num[i].equals(""))continue;
                //百分号
            else if(num[i].contains("%")) n[i] = Double.parseDouble(num[i].replace("%",""))/100;
                //开根 
//            else if(num[i].contains("√")) n[i] = Math.sqrt(Double.parseDouble(num[i].replace("√", "")));
            else n[i] = Double.parseDouble(num[i]);
        }

        if(flag) n[0] -= n[0]*2;          //负数情况
        char[] sy = s1.replaceAll("[^-÷×+]","").toCharArray();  //获得运算符
        int slen = sy.length;
        if(sy.length == num.length)slen--;
        char c = '+';
        double result = n[0] ;                                                               //结果
        if(n.length>1)
        {
            for (int j = 0; j < slen; j++)             //先算乘除
            {
                if (sy[j] == '×')
                {
                    n[j + 1] = n[j] * n[j + 1];
                    n[j] = 0;
                    if (c == '+') sy[j] = '+';  //判断乘除的前一个运算符是什么
                    else sy[j] = '-';
                }
                else if (sy[j] == '÷')
                {
                    if (n[j + 1] != 0) n[j + 1] = n[j] / n[j + 1];
                    else n[j + 1] = 0;
                    n[j] = 0;
                    if (c == '+') sy[j] = '+';
                    else sy[j] = '-';
                } else
                    c = sy[j];
            }
            result = n[0];
            for (int j = 0; j < slen; j++) {               //求和
                if (sy[j] == '+') result += n[j + 1];
                if (sy[j] == '-') result -= n[j + 1];
            }
        }
        if((int)result == result )editText.setText((int)result+"");                            //显示
        else
        {	//控制输出小数点后6位
            result = Double.parseDouble(String.format("%.6f", result));
            editText.setText(result+"");
        }


    }


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //获取id
        View b1 = findViewById(R.id.b1);
        View b2 = findViewById(R.id.b2);
        View b3= findViewById(R.id.b3);
        View b4 = findViewById(R.id.b4);
        View b5 = findViewById(R.id.b5);
        View b6 = findViewById(R.id.b6);
        View b7 = findViewById(R.id.b7);
        View b8 = findViewById(R.id.b8);
        View b9 = findViewById(R.id.b9);
        View b0 = findViewById(R.id.b0);
        View b00 = findViewById(R.id.b00);

        //运算符

        View plus = findViewById(R.id.plus);// +
        View sub = findViewById(R.id.sub);// -
        View mul = findViewById(R.id.mul);// *
        View per = findViewById(R.id.per); // %
        View div = findViewById(R.id.div); // /
        View dot = findViewById(R.id.dot);//小数点
        View equ = findViewById(R.id.equ);//=
        View clear = findViewById(R.id.clear);//清空
        View back = findViewById(R.id.back); //回退

        editText = (EditText) findViewById(R.id.editText);//结果集

        //添加监听事件
        b0.setOnClickListener(this);
        b1.setOnClickListener(this);
        b2.setOnClickListener(this);
        b3.setOnClickListener(this);
        b4.setOnClickListener(this);
        b5.setOnClickListener(this);
        b6.setOnClickListener(this);
        b7.setOnClickListener(this);
        b8.setOnClickListener(this);
        b9.setOnClickListener(this);
        b00.setOnClickListener(this);

        per.setOnClickListener(this);
        plus.setOnClickListener(this);
        sub.setOnClickListener(this);
        mul.setOnClickListener(this);
        div.setOnClickListener(this);
        dot.setOnClickListener(this);
        equ.setOnClickListener(this);
        clear.setOnClickListener(this);
        back.setOnClickListener(this);

    }



}
 

测试

Android-简易计算器
Android-简易计算器

本文地址:https://blog.csdn.net/m0_46267375/article/details/108875507