zoukankan      html  css  js  c++  java
  • Android——计算器第一次完善

    完善:

    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;
            }
        }
    
    }
  • 相关阅读:
    了解大数据的特点、来源与数据呈现方式
    结对项目
    第四次作业
    阅读《构建之法》1-5章有感
    iOS 应用如何完全支持 IPv6-ONLY 网络?
    丙申年把真假美猴王囚禁在容器中跑 ASP.NET Core 1.0
    ASP.NET Core 1.0 部署 HTTPS (.NET Framework 4.5.1)
    推荐一款跨平台的 Azure Storage Explorer
    更改 Skype for Business Online 的 Sip 地址以匹配UPN
    C# 计算字符串在控制台中的显示长度
  • 原文地址:https://www.cnblogs.com/Chenshuai7/p/5424142.html
Copyright © 2011-2022 走看看