Android——計算器第一次完善

weixin_34067049發表於2016-04-23

完善:

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;
        }
    }

}

 

相關文章