完善:

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

Android——计算器第一次完善的更多相关文章

  1. Android计算器简单逻辑实现

    Android计算器简单逻辑实现 引言: 我的android计算器的实现方式是:按钮输入一次,就处理一次. 但是如果你学过数据结构(栈),就可以使用表达式解析(前缀,后缀)处理. 而这个方式已经很成熟 ...

  2. Android计算器布局

    Android(安桌)计算器布局实现         ——解决整个屏幕方案 引言:     学完了android布局的几种方式,做了一个android计算器. 我在网上搜索了这方面的资料,发现了布局都 ...

  3. Android计算器尝试

    学了一段时间Android了,一直都是在看,没有什么尝试,刚好最近大致学会了gridview配合simpleadpter的使用,于是想着动手练习一下,就选择了写一个最简单的计算器来实现. 只包含+-* ...

  4. Android应用第一次安装成功点击“打开”后Home键切出应用后再点击桌面图标返回导致应用重启问题

    最近项目中遇到一个问题,用户第一次安装应用在系统的安装器安装完成界面有“完成”和“打开”两个按钮. 当用户点击“打开”按钮进入用户注册页面进行手机号验证码发送和验证码输入等操作界面,若此时用户点击Ho ...

  5. java实现可有括号的android计算器

    写了一个android版的计算器,可以计算带括号的表达式,不过前提是:正确的表达式才行 小缺陷是没有做表达式括号的控制,现在还没有想到好的控制方式 package javaAdvanced; impo ...

  6. Android计算器开发实例

    Android简单计算器开发实例如图: ==================================================== activity_main.xml 代码如下: < ...

  7. 结对实验报告-android计算器设计

     一:引言  目前手机可以说是普及率非常高的电子设备了,由于其便于携带,使用方便,资费适中等等原因,现在手机已经在一定程度开始代替固定电话的通话功能,以及一些原来电脑软件上的功能了.手机上的软件也随着 ...

  8. Android Studio 第一次新建Android Gradle项目超级慢的解决方案

    大家有什么问题,欢迎问我! 注:Android Studio在第一次新建一个Gradle项目时需要下载Gradle,所以启动很慢(Gradle-bin大约三十几兆),所以我们应该事先帮他下载好. 首先 ...

  9. Android——计算器

    layout文件: <?xml version="1.0" encoding="utf-8"?> <GridLayout xmlns:andr ...

随机推荐

  1. [转]IC行业的牛人

    转载的:   说来惭愧,我所了解的牛人也只是大学教授,工业界的高手了解的还太少,虽然我对教育界的牛人了解的也不多,但这里也要牢骚几句,论坛上的人好像只是认识Gray,Razavi,Allen,Lee, ...

  2. 怎么安装预装的win8三星笔记本改win7再装Ubuntu问题[zz]

    随着科技的高速发展,人们对电脑的要求越来越高,对电脑系统的要求亦是,那些电脑自带的系统,很多时候已经无法满足人们的需求了,而为了满足自己的需求,人们往往会为电脑改装新系统,而本文要和大家一起分享的话题 ...

  3. 安装Flume的时候出现File Channel transaction capacity cannot be greater than the capacity of the channel capacity -解决方案 摘自网络

    部署flume集群时,在启动collector服务器没报错,启动agent服务器报错: File Channel transaction capacity cannot be greater than ...

  4. haproxy 日志配置

    haproxy日志配置 haproxy在默认情况不会记录日志,除了在haproxy.conf中的global段指定日志的输出外,还需要配置系统日志的配置文件.下面以centos6.4为例,haprox ...

  5. [CTCI] 最长合成字符串

    最长合成字符串 题目描述 有一组单词,请编写一个程序,在数组中找出由数组中字符串组成的最长的串A,即A是由其它单词组成的(可重复)最长的单词. 给定一个string数组str,同时给定数组的大小n.请 ...

  6. RecyclerView 与 ItemTouchHelper 实现拖拽效果

    截图 需求 App 开发新的需求,要求 RecyclerView 实现的九宫格样式可以拖拽,松手以后变更位置,类似于手机桌面拖动 app 变更位置. 分析 经过搜索,发现 support 中带有一个类 ...

  7. Cocos2d-x 源代码分析 : Scheduler(定时器) 源代码分析

    源代码版本号 3.1r,转载请注明 我也最终不out了,開始看3.x的源代码了.此时此刻的心情仅仅能是wtf! !!!!!!! !.只是也最终告别CC时代了. cocos2d-x 源代码分析文件夹 h ...

  8. 关于第三方cookie的作用域以及针对用户行为的使用

    cookie,很多网站都会用的一个机制,可以保存用户的相关信息,token等等,很多人熟知的应该是第一方cookie,可以针对二级域名进行信息的保存,如果遇到跨域的情况,那么第一方cookie是没有用 ...

  9. C和指针第13章第4题

    题目:编写一个函数,它用于对一个任何类型的数组进行排序. 算法核心代码sort函数实现 /** 功能说明:sort函数可以对不同类型的数据进行排序 参数: 1.一个指向需要排序的数组的第一个值的指针. ...

  10. zabbix 对网卡的流量的监控

    新建Template:Network incoming or outcoming on eth1 新建items:Network incoming on eth1 特别注意:储存值:差量(每秒速率)- ...