Android实现简易的计算器

2020-10-23 0 450

本文实例为大家分享了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);

 }



}

测试

Android实现简易的计算器

Android实现简易的计算器

关于计算器的精彩文章请查看《计算器专题》 ,更多精彩等你来发现!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持自学编程网。

遇见资源网 Android Android实现简易的计算器 http://www.ox520.com/23810.html

常见问题

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务