完善:
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; } } }