完善:
1- 处理首位为0
2- 处理首位为“.”
3- 处理前两位为“0.”,此时首位为0,但是不能处理
4- 处理小数点不能重复输入
发现bug:12.3x6 = 如下图:
xml
<?xml version="1.0" encoding="utf-8"?> <GridLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:rowCount="6" android:columnCount="4"> <!--6行4列 实现占满整个屏幕--> <EditText android:layout_columnSpan="4" android:layout_gravity="fill_horizontal" android:layout_rowWeight="2" android:editable="false" android:id="@+id/et" android:gravity="right|center" android:textSize="50dp" android:text="0"/> <!--跨四列 自动填充 权重2--> <Button android:text="清除" android:layout_columnWeight="1" android:layout_rowWeight="1" android:textSize="20dp" android:textColor="#00F" android:id="@+id/bt_clear"/> //列 行权重为1 <Button android:text="后退" android:layout_columnWeight="1" android:layout_rowWeight="1" android:textSize="20dp" android:textColor="#00f" android:id="@+id/bt_goback"/> //列 行权重为1 <Button android:text="/" android:layout_columnWeight="1" android:layout_rowWeight="1" android:textSize="20dp" android:id="@+id/chu"/> //列 行权重为1 <Button android:text="x" android:layout_columnWeight="1" android:layout_rowWeight="1" android:textSize="20dp" android:id="@+id/cheng"/> //列 行权重为1 <Button android:text="7" android:layout_columnWeight="1" android:layout_rowWeight="1" android:textSize="20dp" android:id="@+id/bt_7"/> //列 行权重为1 <Button android:text="8" android:layout_columnWeight="1" android:layout_rowWeight="1" android:textSize="20dp" android:id="@+id/bt_8"/> //列 行权重为1 <Button android:text="9" android:layout_columnWeight="1" android:layout_rowWeight="1" android:textSize="20dp" android:id="@+id/bt_9"/> //列 行权重为1 <Button android:text="-" android:layout_columnWeight="1" android:layout_rowWeight="1" android:textSize="20dp" android:id="@+id/jian"/> //列 行权重为1 <Button android:text="4" android:layout_columnWeight="1" android:layout_rowWeight="1" android:textSize="20dp" android:id="@+id/bt_4"/> //列 行权重为1 <Button android:text="5" android:layout_columnWeight="1" android:layout_rowWeight="1" android:textSize="20dp" android:id="@+id/bt_5"/> //列 行权重为1 <Button android:text="6" android:layout_columnWeight="1" android:layout_rowWeight="1" android:textSize="20dp" android:id="@+id/bt_6"/> //列 行权重为1 <Button android:text="+" android:layout_columnWeight="1" android:layout_rowWeight="1" android:textSize="20dp" android:id="@+id/jia"/> //列 行权重为1 <Button android:text="1" android:layout_columnWeight="1" android:layout_rowWeight="1" android:textSize="20dp" android:id="@+id/bt_1"/> //列 行权重为1 <Button android:text="2" android:layout_columnWeight="1" android:layout_rowWeight="1" android:textSize="20dp" android:id="@+id/bt_2"/> //列 行权重为1 <Button android:text="3" android:layout_columnWeight="1" android:layout_rowWeight="1" android:textSize="20dp" android:id="@+id/bt_3"/> //列 行权重为1 <Button android:text="=" android:layout_rowSpan="2" android:layout_gravity="fill_vertical" android:layout_columnWeight="1" android:layout_rowWeight="2" android:textSize="20dp" android:background="#22ac38" android:id="@+id/result"/> //跨两行 自动填充 绿色 列权重1 行权重2 <Button android:text="0" android:layout_columnSpan="2" android:layout_gravity="fill_horizontal" android:layout_columnWeight="2" android:layout_rowWeight="1" android:textSize="20dp" android:id="@+id/bt_0"/> //跨两列 自动填充 列权重2 行权重1 <Button android:text="." android:layout_columnWeight="1" android:layout_rowWeight="1" android:textSize="20dp" android:id="@+id/dian"/> //列 行 权重1 </GridLayout>
java
package com.example.chenshuai.test322; import android.os.Bundle; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; /** * Created by chenshuai anniu1 2016/3/26. */ public class Activity2 extends AppCompatActivity implements View.OnClickListener{ EditText et; Button bt_clear; Button bt_goback; Button bt_1; Button bt_2; Button bt_3; Button bt_4; Button bt_5; Button bt_6; Button bt_7; Button bt_8; Button bt_9; Button bt_0; Button jia; Button jian; Button cheng; Button chu; Button result; Button dian; //显示屏 全局变量 //存储显示的内容 //StringBuilder 操作字符串的工具类 private StringBuilder str_show = new StringBuilder(); //当前运算符按钮的id private int id_yunsf = 0; //保存输入的值 用包装类,基本数值类型不能判断为空 private Double number_1;//运算符前面的数值 private Double number_2;//运算符后面的数值 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.gridlayout); //实例化监听器 et = (EditText)findViewById(R.id.et); bt_1 = (Button)findViewById(R.id.bt_1); bt_2= (Button)findViewById(R.id.bt_2); bt_3 = (Button)findViewById(R.id.bt_3); bt_4= (Button)findViewById(R.id.bt_4); bt_5 = (Button)findViewById(R.id.bt_5); bt_6= (Button)findViewById(R.id.bt_6); bt_7 = (Button)findViewById(R.id.bt_7); bt_8= (Button)findViewById(R.id.bt_8); bt_9 = (Button)findViewById(R.id.bt_9); bt_0= (Button)findViewById(R.id.bt_0); jia = (Button)findViewById(R.id.jia); jian= (Button)findViewById(R.id.jian); cheng = (Button)findViewById(R.id.cheng); chu= (Button)findViewById(R.id.chu); result = (Button)findViewById(R.id.result); dian= (Button)findViewById(R.id.dian); bt_clear = (Button)findViewById(R.id.bt_clear); bt_goback= (Button)findViewById(R.id.bt_goback); bt_0.setOnClickListener(this); bt_1.setOnClickListener(this); bt_2.setOnClickListener(this); bt_3.setOnClickListener(this); bt_4.setOnClickListener(this); bt_5.setOnClickListener(this); bt_6.setOnClickListener(this); bt_7.setOnClickListener(this); bt_8.setOnClickListener(this); bt_9.setOnClickListener(this); jia.setOnClickListener(this); jian.setOnClickListener(this); cheng.setOnClickListener(this); chu.setOnClickListener(this); dian.setOnClickListener(this); result.setOnClickListener(this); bt_goback.setOnClickListener(this); bt_clear.setOnClickListener(this); } //View 事件源组件 public void onClick(View v) { Button bt = (Button)v; int id = bt.getId(); switch (id) { case R.id.bt_clear: //重新实例化,实现清除 str_show = new StringBuilder(); et.setText(str_show); number_1 = null; number_2 = null; id_yunsf = 0; break; case R.id.bt_goback: //防止删到最后一个 if(str_show.length()>0) //实现后退 索引值从0开始 删除最后一个字符 { str_show.deleteCharAt(str_show.length() - 1); et.setText(str_show); } break; case R.id.bt_0: case R.id.bt_1: case R.id.bt_2: case R.id.bt_3: case R.id.bt_4: case R.id.bt_5: case R.id.bt_6: case R.id.bt_7: case R.id.bt_8: case R.id.bt_9: if (id !=R.id.bt_0 ||(id==R.id.bt_0 && !str_show.toString().equals("0")) ) { str_show.append(bt.getText()); //长度大于等于2,截取第一位,判断为0的话,字符串从第一位开始截取,实现首位不为0, // 同时判断第二位是否是点,如果输入的是"0."对首位为0不再操作 if (str_show.length() >= 2) { //首位不为0 String shouwei = str_show.substring(0, 1); String second = str_show.substring(1,2); //首位不为0,第二位不为点 if (shouwei.equals("0") && !second.equals(".") ) { //et.setText(str_show.substring(1)); String dian = str_show.substring(1); et.setText(dian); } else { et.setText(str_show); } } else { et.setText(str_show); } } break; case R.id.dian: //判断.是否存在 如果不存在 if (str_show.indexOf(".") == -1) { //先把输入的值放进来再判断 str_show.append(bt.getText()); //第一次输入的是'.',转换为'0.' if (str_show.substring(0,1).equals(".")) { str_show.replace(0, 1, "0."); } //str_show.append(bt.getText()); } else { } et.setText(str_show); break; case R.id.result: case R.id.jia: case R.id.jian: case R.id.cheng: case R.id.chu: //前面值是空,转换一下 if (number_1==null) { //运算符不能在第一个 if (str_show.length()>0) { number_1 = new Double(str_show.toString()); id_yunsf = bt.getId(); //重新实例化,实现清除 str_show = new StringBuilder(); //et.setText(str_show); } } else//直接计算 { if (str_show.length()>0) { //运算符后边的内容赋值 number_2 = new Double(str_show.toString()); } //判断运算符 switch (id_yunsf) { case R.id.jia: //运算 number_1 = number_1.doubleValue() + number_2.doubleValue(); break; case R.id.jian: //运算 //结果给number_1 number_1 = number_1.doubleValue() - number_2.doubleValue(); break; case R.id.cheng: //运算 //结果给number_1 number_1 = number_1.doubleValue() * number_2.doubleValue(); break; case R.id.chu: //运算 //结果给number_1 if (number_2 !=0) { number_1 = number_1.doubleValue() / number_2.doubleValue(); } else { Toast.makeText(this,"不能除0",Toast.LENGTH_LONG).show(); } break; } //记录运算符 id_yunsf=bt.getId(); //显示当前运算结果 et.setText(number_1.toString()); //清空 str_show = new StringBuilder(); } break; } } }