Android-简易计算器

布局(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);

    }



}
 

测试

在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/m0_46267375/article/details/108875507
今日推荐