小小白的Android入门之计算器学习

博客记录只是为了做笔记,今天练习了计算器demo,编程思路过程如下:

1. 布局:Button点击事件

2.计算功能的实现

setText(data)方法:把data放进布局里

stringBuffer.append(data);//把data存入缓冲区,实现连续输入
stringBuffer.delete(0,stringBuffer.length());//public delete(int start, int end)移除此序列的子字符串中的字符。
String str = stringBuffer.toString();//用字符串接收了Buffer里面的字符串
String result = Double.toString(calc.calculate(str));//把double类型的数据(calc.calculate(str))强转成double类型

 calculate(String str)是封装类Calculator里的方法

stringBuffer.replace(0,stringBuffer.length(),result);
//replace(int start, int end, String str)使用给定String中的字符替换此序列的子字符串中的字符。

3.Bug修复

1)点击按钮 “C” ,本该清空,出现闪退,日志报错:EmptyStackException

原因:运行的时候忘记break了,接着运行下面代码的时候,因为计算了一个空字符串会导致程序崩掉。

修复:加上break;

2)当除数为0的时候,闪退,日志报错:Division by zero

原因:除法没有判断除数是否为零

修复:加判断

case R.id.div:
    textView.setText("");
    String strDiv = stringBuffer.toString();
    if((strDiv.lastIndexOf('+') == strDiv.length() - 1)
            || (strDiv.lastIndexOf('-') == strDiv.length() - 1)
            || (strDiv.lastIndexOf('*') == strDiv.length() - 1)
            || (strDiv.lastIndexOf('/') == strDiv.length() - 1)){
        Log.i("error","不能连续输入运算符");
    }else {
        //textView.setText("不能连续输入运算符");
        stringBuffer.append("/");
    }
    break;

3)不允许连续输入小数点和运算符

修复:都判断一下

case R.id.point:
    textView.setText("");
    String strPoint = stringBuffer.toString();
    if((strPoint.lastIndexOf('+') == strPoint.length() - 1)
            || (strPoint.lastIndexOf('-') == strPoint.length() - 1)
            || (strPoint.lastIndexOf('*') == strPoint.length() - 1)
            || (strPoint.lastIndexOf('/') == strPoint.length() - 1)
            || (strPoint.lastIndexOf('.') == strPoint.length() - 1)){
        Log.i("error","不能输入小数点");
    }else {
        //textView.setText("不能连续输入小数点");
        stringBuffer.append(".");
    }
    break;

4)去掉EditView的红线,修改光标的颜色

修复:已修复

去红线:android:background="@null"

修改光标颜色:https://blog.csdn.net/nonecode/article/details/81953767

 

4.成果展示 

小小白的Android入门之计算器学习_第1张图片

 

下载链接:https://download.csdn.net/download/s_jggod/11161745

新进入csdn,这是上传的第一个demo,不知道为什么需要积分才能下载,欢迎私信

你可能感兴趣的:(小小白的Android入门之计算器学习)