Android计算器简单逻辑实现

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 }

 

 

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。