基于Android 2.3.3做的一个练手计算器。
可解析带括号的四则运算。
解析算术表达式的时候,准备调用Webkit通过Js来解析的。
但是2.3.3存在Bug,Js调用Java会导致程序崩溃,
所以没办法,最后是用 BeanShell来解析的。
不过,因为需要每个参与计算的数字都是浮点型,
才能正确无误的保留精度,因为我正则不行,过滤表达式还是花了点功夫
首个Android程序,欢迎大家给与意见和指导~
标签:
Android SDK
代码片段(4)
[图片] calc.png
[文件] calculator.apk ~ 360KB 下载(137)
[文件] calc-src.zip ~ 2MB 下载(1451)
[代码] [Java]代码
001
|
package com.example.calculator;
|
002
|
003
|
004
|
import java.util.Arrays;
|
005
|
006
|
import bsh.EvalError;
|
007
|
import bsh.Interpreter;
|
008
|
import android.os.Bundle;
|
009
|
import android.app.Activity;
|
010
|
import android.view.View;
|
011
|
import android.view.View.OnClickListener;
|
012
|
import android.widget.Button;
|
013
|
import android.widget.EditText;
|
014
|
015
|
/**
|
016
|
*
|
017
|
*/
|
018
|
public class CalculatorActivity extends Activity implements OnClickListener{
|
019
|
020
|
EditText null ; //显示器
|
021
|
boolean isClear false ; //用于是否显示器需要被清理
|
022
|
@Override
|
023
|
protected void onCreate(Bundle
|
024
|
super .onCreate(savedInstanceState);
|
025
|
setContentView(R.layout.calculator);
|
026
|
|
027
|
//fun
|
028
|
rsText
|
029
|
Button
|
030
|
Button
|
031
|
Button
|
032
|
Button
|
033
|
Button
|
034
|
Button
|
035
|
Button
|
036
|
Button
|
037
|
Button
|
038
|
|
039
|
//num
|
040
|
Button
|
041
|
Button
|
042
|
Button
|
043
|
Button
|
044
|
Button
|
045
|
Button
|
046
|
Button
|
047
|
Button
|
048
|
Button
|
049
|
Button
|
050
|
Button
|
051
|
|
052
|
//listener
|
053
|
btnTono.setOnClickListener( this );
|
054
|
btnLeft.setOnClickListener( this );
|
055
|
btnRight.setOnClickListener( this );
|
056
|
btnDel.setOnClickListener( this );
|
057
|
btnPlu.setOnClickListener( this );
|
058
|
btnMin.setOnClickListener( this );
|
059
|
btnMul.setOnClickListener( this );
|
060
|
btnDiv.setOnClickListener( this );
|
061
|
btnEqu.setOnClickListener( this );
|
062
|
num0.setOnClickListener( this );
|
063
|
num1.setOnClickListener( this );
|
064
|
num2.setOnClickListener( this );
|
065
|
num3.setOnClickListener( this );
|
066
|
num4.setOnClickListener( this );
|
067
|
num5.setOnClickListener( this );
|
068
|
num6.setOnClickListener( this );
|
069
|
num7.setOnClickListener( this );
|
070
|
num8.setOnClickListener( this );
|
071
|
num9.setOnClickListener( this );
|
072
|
dot.setOnClickListener( this );
|
073
|
}
|
074
|
075
|
@Override
|
076
|
public void onClick(View
|
077
|
Button
|
078
|
String
|
079
|
if (isClear
|
080
|
btn.getText().equals( "0" )
|
081
|
||btn.getText().equals( "1" )
|
082
|
||btn.getText().equals( "2" )
|
083
|
||btn.getText().equals( "3" )
|
084
|
||btn.getText().equals( "4" )
|
085
|
||btn.getText().equals( "5" )
|
086
|
||btn.getText().equals( "6" )
|
087
|
||btn.getText().equals( "7" )
|
088
|
||btn.getText().equals( "8" )
|
089
|
||btn.getText().equals( "9" )
|
090
|
||btn.getText().equals( "." ))
|
091
|
||btn.getText().equals( "算数公式错误" )){
|
092
|
rsText.setText( "" );
|
093
|
isClear false ;
|
094
|
}
|
095
|
if (btn.getText().equals( "C" )){
|
096
|
rsText.setText( "" );
|
097
|
} else if (btn.getText().equals( "清除" )){
|
098
|
if (isEmpty(exp)) return ;
|
099
|
else
|
100
|
rsText.setText(exp.substring( 0 , 1 ));
|
101
|
} else if (btn.getText().equals( "=" )){
|
102
|
if (isEmpty(exp)) return ;
|
103
|
exp "×" , "*" );
|
104
|
exp "÷" , "/" );
|
105
|
rsText.setText(getRs(exp));
|
106
|
isClear false ;
|
107
|
} else {
|
108
|
rsText.setText(rsText.getText()+ "" +btn.getText());
|
109
|
isClear false ;
|
110
|
}
|
111
|
//操作完成后始终保持光标在最后一位
|
112
|
rsText.setSelection(rsText.getText().length());
|
113
|
}
|
114
|
115
|
/***
|
116
|
*
|
117
|
*
|
118
|
*/
|
119
|
private String
|
120
|
Interpreter new Interpreter();
|
121
|
Number null ;
|
122
|
try {
|
123
|
exp
|
124
|
result
|
125
|
} catch (EvalError
|
126
|
e.printStackTrace();
|
127
|
isClear true ;
|
128
|
return "算数公式错误" ;
|
129
|
}
|
130
|
exp "" ;
|
131
|
if (exp.endsWith( ".0" ))
|
132
|
exp 0 , ".0" ));
|
133
|
return exp;
|
134
|
}
|
135
|
136
|
|
137
|
/**
|
138
|
*
|
139
|
*
|
140
|
*
|
141
|
*/
|
142
|
private String
|
143
|
String "" );
|
144
|
String null ;
|
145
|
int begin= 0 ,end= 0 ;
|
146
|
for ( int i 1 ;
|
147
|
temp
|
148
|
if (temp.matches( "[+-/()*]" )){
|
149
|
if (temp.equals( "." )) continue ;
|
150
|
end 1 ;
|
151
|
temp
|
152
|
if (temp.trim().length() 0 && "." )< 0 )
|
153
|
num[i- 1 ] 1 ]+ ".0" ;
|
154
|
begin 1 ;
|
155
|
}
|
156
|
}
|
157
|
return Arrays.toString(num).replaceAll( "[\\[\\], , "" );
|
158
|
}
|
159
|
|
160
|
/***
|
161
|
*
|
162
|
*
|
163
|
*/
|
164
|
private boolean isEmpty(String
|
165
|
return (str== null || 0 );
|
166
|
}
|
167
|
|
168
|
}
|
时间: 2024-10-29 06:57:45