Android计算器简单逻辑实现
引言:
我的android计算器的实现方式是:按钮输入一次,就处理一次。
但是如果你学过数据结构(栈),就可以使用表达式解析(前缀,后缀)处理。
而这个方式已经很成熟了,但是时间有限,只完成了这个简单的计算器。
至于,这个Android的布局已经在我博客中发布了,不再讲述。
1 package com.example.androidlessontwo;
2
3 import android.os.Bundle;
4 import android.app.Activity;
5 import android.view.Menu;
6 import android.view.View;
7 import android.widget.Button;
8 import android.widget.TextView;
9
10 public class MainActivity extends Activity {
11
12 private Button[] buttonNum=new Button[11];
13 private Button[] buttonComand=new Button[5];
14 private TextView input=null;
15 private TextView rl=null;
16 private Button buttonClear=null;
17 private boolean firstFlag=true;
18 private double result=0.0;
19 private String lastCommand;
20
21 public void MyCalculator()
22 {
23 result = 0.0;
24 firstFlag=true;
25 lastCommand="=";
26 }
27 @Override
28 protected void onCreate(Bundle savedInstanceState) {
29 super.onCreate(savedInstanceState);
30 setContentView(R.layout.activity_main);
31 buttonNum[0]=(Button) findViewById(R.id.num0);
32 buttonNum[1]=(Button) findViewById(R.id.num1);
33 buttonNum[2]=(Button) findViewById(R.id.num2);
34 buttonNum[3]=(Button) findViewById(R.id.num3);
35 buttonNum[4]=(Button) findViewById(R.id.num4);
36 buttonNum[5]=(Button) findViewById(R.id.num5);
37 buttonNum[6]=(Button) findViewById(R.id.num6);
38 buttonNum[7]=(Button) findViewById(R.id.num7);
39 buttonNum[8]=(Button) findViewById(R.id.num8);
40 buttonNum[9]=(Button) findViewById(R.id.num9);
41 buttonNum[10]=(Button) findViewById(R.id.point);
42
43 buttonComand[0]=(Button) findViewById(R.id.add);
44 buttonComand[1]=(Button) findViewById(R.id.sub);
45 buttonComand[2]=(Button) findViewById(R.id.ride);
46 buttonComand[3]=(Button) findViewById(R.id.divide);
47 buttonComand[4]=(Button) findViewById(R.id.equal);
48
49 input=(TextView) findViewById(R.id.input);
50 rl =(TextView) findViewById(R.id.rl);
51 buttonClear=(Button) findViewById(R.id.clean);
52
53 NumberAction na= new NumberAction();
54 CommandAction ca=new CommandAction();
55 for(Button bc:buttonComand)
56 {
57 bc.setOnClickListener(ca);
58 }
59 for(Button bc:buttonNum)
60 {
61 bc.setOnClickListener(na);
62 }
63 buttonClear.setOnClickListener(new Button.OnClickListener()
64 {
65
66 @Override
67 public void onClick(View v) {
68 MyCalculator();
69 rl.setText("0.0");
70 }
71 });
72 }
73 @Override
74 public boolean onCreateOptionsMenu(Menu menu) {
75 // Inflate the menu; this adds items to the action bar if it is present.
76 getMenuInflater().inflate(R.menu.main, menu);
77 return true;
78 }
79 private class NumberAction implements Button.OnClickListener
80 {
81
82 @Override
83 public void onClick(View view)
84 {
85 Button btn = (Button)view;
86 String inputTemp =btn.getText().toString();//6
87 input.setText(input.getText().toString()+inputTemp);
88 double numtemp = 0;
89 switch(btn.getId())
90 {
91 case R.id.num0:
92 {
93 if(firstFlag)
94 {
95 result=result*10+0;
96 firstFlag=false;
97 }
98 else
99 numtemp=numtemp*10+0;
100 break;
101 }
102 case R.id.num1:
103 {
104 if(firstFlag)
105 {
106 result=result*10+1;
107 firstFlag=false;
108 }
109 else
110 numtemp=numtemp*10+1;
111 break;
112 }
113 case R.id.num2:
114 {
115 if(firstFlag)
116 {
117 result=result*10+2;
118 firstFlag=false;
119 }
120 else
121 numtemp=numtemp*10+2;
122 break;
123 }
124 case R.id.num3:
125 {
126 if(firstFlag)
127 {
128 result=result*10+3;
129 firstFlag=false;
130 }
131 else
132 numtemp=numtemp*10+3;
133 break;
134 }
135 case R.id.num4:
136 {
137 if(firstFlag)
138 {
139 result=result*10+4;
140 firstFlag=false;
141 }
142 else
143 numtemp=numtemp*10+4;
144 break;
145 }
146 case R.id.num5:
147 {
148 if(firstFlag)
149 {
150 result=result*10+5;
151 firstFlag=false;
152 }
153 else
154 numtemp=numtemp*10+5;
155 break;
156 }
157 case R.id.num6:
158 {
159 if(firstFlag)
160 {
161 result=result*10+6;
162 firstFlag=false;
163 }
164 else
165 {
166 numtemp=numtemp*10+6;
167 calculate(numtemp);
168 }
169 break;
170 }
171 case R.id.num7:
172 {
173 if(firstFlag)
174 {
175 result=result*10+7;
176 firstFlag=false;
177 }
178 else
179 {
180 numtemp=numtemp*10+7;
181 calculate(numtemp);
182 }
183 break;
184 }
185 case R.id.num8:
186 {
187 if(firstFlag)
188 {
189 result=result*10+8;
190 {
191 result=result*10+8;
192 firstFlag=false;
193 }
194 }
195 else
196 {
197 numtemp=numtemp*10+8;
198 calculate(numtemp);
199 }
200 break;
201 }
202 case R.id.num9:
203 {
204 if(firstFlag)
205 {
206 result=result*10+9;
207 firstFlag=false;
208 }
209 else
210 {
211 numtemp=numtemp*10+9;
212 calculate(numtemp);
213 }
214 break;
215 }
216 }
217
218
219
220
221 }
222
223 }
224
225 private class CommandAction implements Button.OnClickListener
226 {
227 @Override
228 public void onClick(View v)
229 {
230 Button btn=(Button)v;
231 String inputCommand=(String)btn.getText();
232 switch(btn.getId())
233 {
234 case R.id.add:
235 {
236 lastCommand="+";
237 break;
238 }
239 case R.id.sub:
240 {
241 lastCommand="-";
242 break;
243 }
244 case R.id.ride:
245 {
246 lastCommand="*";
247 break;
248 }
249 case R.id.divide:
250 {
251 lastCommand="/";
252 break;
253 }
254 case R.id.equal:
255 {
256 lastCommand="=";
257 input.setText("");
258 rl.setText(String.valueOf(result));
259 return ;
260 }
261
262 }
263 input.setText(input.getText()+inputCommand);
264 }
265
266 }
267 private void calculate(double x)
268 {
269
270
271 if(lastCommand.equals("+"))
272 {
273 result += x;
274 }
275
276 if(lastCommand.equals("-"))
277 {
278 result -= x;
279 }
280
281 if(lastCommand.equals("*"))
282 {
283 result *= x;
284 }
285
286 if(lastCommand.equals("/"))
287 {
288 result /= x;
289 }
290 }
291
292 }
复制去Google翻译翻译结果