Android-简易计算器

   日期:2020-10-01     浏览:88    评论:0    
核心提示:文章目录布局(activity_main.xml)响应及计算(MainActivity)测试布局(activity_main.xml)<GridLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/GridLayout1"

文章目录

  • 布局(activity_main.xml)
  • 响应及计算(MainActivity)
  • 测试

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

    }



}
 

测试


 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服