博客记录只是为了做笔记,今天练习了计算器demo,编程思路过程如下:
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中的字符替换此序列的子字符串中的字符。
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
下载链接:https://download.csdn.net/download/s_jggod/11161745
新进入csdn,这是上传的第一个demo,不知道为什么需要积分才能下载,欢迎私信