四則運算安卓版ver.mk3

08林達發表於2015-12-19

在原有的基礎上做了些許改動以及新增了一點小功能,以下是程式碼:

 

  1 package com.example.add;
  2 
  3 import java.io.File;
  4 
  5 import com.example.add.opt;
  6 import com.example.add.R;
  7 
  8 import java.text.DecimalFormat;
  9 
 10 import android.media.MediaPlayer;
 11 import android.os.Bundle;
 12 import android.view.View;
 13 import android.app.Activity;
 14 import android.widget.Button;
 15 import android.widget.EditText;
 16 import android.widget.Toast;
 17 
 18     public class MainActivity extends Activity {
 19         
 20         MediaPlayer mp;
 21         int x;//題目個數
 22         int y=0;
 23         int n;
 24         int i=1;
 25         char[] op = { '+', '-', '*', '/' };
 26         int[] nov = new int[4];
 27         int zf;//控制正負
 28         int zz;//題型控制
 29         String str = new String();
 30         String str1 = new String();
 31         int[] num1 = new int[5];
 32         String s[] = new String[5];
 33         int num2=0;
 34         float[] anser=new float[5];//使用者的答案
 35         float[] trueanser=new float[5];//正確答案
 36         File file;
 37         int a=0;
 38         int b=0;
 39         int bb=0;
 40         long begin=0,end=0,time=0;
 41         String ss;
 42         // int c = 0;
 43         opt opt=new opt();;
 44         EditText editText,xs;
 45         StringBuffer text,text1;
 46         String number_1="",number_2="";
 47         boolean clicked=false;
 48         byte style=0;
 49         Button btn_1,btn_2,btn_3,btn_4,btn_5,btn_6,btn_7,btn_8,btn_9,btn_0;
 50         Button start,btn_eq,btn_dot,btn_clear,btn_m1,btn_m2,btn_m3;
 51         private Button btn_dot1;
 52         /** Called when the activity is first created. */
 53         
 54         public void stop(){
 55             mp.reset();
 56             mp=MediaPlayer.create(this, R.raw.unity);
 57         }
 58         @Override
 59         public void onCreate(Bundle savedInstanceState) {
 60             super.onCreate(savedInstanceState);
 61             setContentView(R.layout.fragment_main);
 62             text=new StringBuffer();
 63             editText=(EditText)findViewById(R.id.result);
 64             xs=(EditText)findViewById(R.id.xs);
 65             mp=MediaPlayer.create(this, R.raw.unity);
 66             //editText.setFocusable(false);
 67             btn_1=(Button) findViewById(R.id.btn_1);
 68             btn_1.setOnClickListener(new Button.OnClickListener(){
 69 
 70                 public void onClick(View v) {
 71                     // TODO Auto-generated method stub
 72                     if(clicked){
 73                         editText.setText("");
 74                         clicked=false;
 75                         text.setLength(0);
 76                     }
 77                     text.append("7");
 78                     editText.setText(text.toString());
 79                     
 80                 }
 81                 
 82             });
 83             btn_2=(Button) findViewById(R.id.btn_2);
 84             btn_2.setOnClickListener(new Button.OnClickListener(){
 85                 
 86                 public void onClick(View v) {
 87                     // TODO Auto-generated method stub
 88                     if(clicked){
 89                         editText.setText("");
 90                         clicked=false;
 91                         text.setLength(0);
 92                     }
 93                     text.append("8");
 94                     editText.setText(text.toString());
 95                 }
 96             });
 97             btn_3=(Button) findViewById(R.id.btn_3);
 98             btn_3.setOnClickListener(new Button.OnClickListener(){
 99                 
100                 public void onClick(View v) {
101                     // TODO Auto-generated method stub
102                     if(clicked){
103                         editText.setText("");
104                         clicked=false;
105                         text.setLength(0);
106                     }
107                     text.append("9");
108                     editText.setText(text.toString());
109                 }
110                 
111             });
112             btn_4=(Button) findViewById(R.id.btn_4);
113             btn_4.setOnClickListener(new Button.OnClickListener(){
114                 
115                 public void onClick(View v) {
116                     // TODO Auto-generated method stub
117                     if(clicked){
118                         editText.setText("");
119                         clicked=false;
120                         text.setLength(0);
121                     }
122                     text.append("4");
123                     editText.setText(text.toString());
124                 }
125                 
126             });
127             btn_5=(Button) findViewById(R.id.btn_5);
128             btn_5.setOnClickListener(new Button.OnClickListener(){
129                 
130                 public void onClick(View v) {
131                     // TODO Auto-generated method stub
132                     if(clicked){
133                         editText.setText("");
134                         clicked=false;
135                         text.setLength(0);
136                     }
137                     text.append("5");
138                     editText.setText(text.toString());
139                 }
140                 
141             });
142             btn_6=(Button) findViewById(R.id.btn_6);
143             btn_6.setOnClickListener(new Button.OnClickListener(){
144                 
145                 public void onClick(View v) {
146                     // TODO Auto-generated method stub
147                     if(clicked){
148                         editText.setText("");
149                         clicked=false;
150                         text.setLength(0);
151                     }
152                     text.append("6");
153                     editText.setText(text.toString());
154                 }
155                 
156             });
157             btn_7=(Button) findViewById(R.id.btn_7);
158             btn_7.setOnClickListener(new Button.OnClickListener(){
159                 
160                 public void onClick(View v) {
161                     // TODO Auto-generated method stub
162                     if(clicked){
163                         editText.setText("");
164                         clicked=false;
165                         text.setLength(0);
166                     }
167                     text.append("1");
168                     editText.setText(text.toString());
169                 }
170                 
171             });
172             btn_8=(Button) findViewById(R.id.btn_8);
173             btn_8.setOnClickListener(new Button.OnClickListener(){
174                 
175                 public void onClick(View v) {
176                     // TODO Auto-generated method stub
177                     if(clicked){
178                         editText.setText("");
179                         clicked=false;
180                         text.setLength(0);
181                     }
182                     text.append("2");
183                     editText.setText(text.toString());
184                 }
185                 
186             });
187             btn_9=(Button) findViewById(R.id.btn_9);
188             btn_9.setOnClickListener(new Button.OnClickListener(){
189                 
190                 public void onClick(View v) {
191                     // TODO Auto-generated method stub
192                     if(clicked){
193                         editText.setText("");
194                         clicked=false;
195                         text.setLength(0);
196                     }
197                     text.append("3");
198                     editText.setText(text.toString());
199                 }
200                 
201             });
202            
203             btn_0=(Button) findViewById(R.id.btn_0);
204             btn_0.setOnClickListener(new Button.OnClickListener(){
205                 
206                 public void onClick(View v) {
207                     // TODO Auto-generated method stub
208                     if(clicked){
209                         editText.setText("");
210                         clicked=false;
211                         text.setLength(0);
212                     }
213                     text.append("0");
214                     editText.setText(text.toString());
215                 }
216                 
217             });
218             
219             btn_dot=(Button) findViewById(R.id.btn_dot);
220             btn_dot.setOnClickListener(new Button.OnClickListener(){
221                 
222                 public void onClick(View v) {
223                     // TODO Auto-generated method stub
224                     if(clicked){
225                         editText.setText("");
226                         clicked=false;
227                         text.setLength(0);
228                     }
229                     if(editText.getText().toString().indexOf(".")==-1){//已經有.了
230                         if(text.length()==0){
231                             text.append("0.");
232                         }else{
233                             text.append(".");
234                         }
235                         editText.setText(text.toString());
236                     }
237                 }
238                 
239             });
240             
241             btn_dot1=(Button) findViewById(R.id.btn_10);
242             btn_dot1.setOnClickListener(new Button.OnClickListener(){
243                 
244                 public void onClick(View v) {
245                     // TODO Auto-generated method stub
246                     if(clicked){
247                         editText.setText("");
248                         clicked=false;
249                         text.setLength(0);
250                     }
251                     text.append("-");
252                     editText.setText(text.toString());
253                 }
254                 
255             });
256             
257             btn_m1=(Button) findViewById(R.id.music1);
258             btn_m1.setOnClickListener(new Button.OnClickListener(){
259                 
260                 public void onClick(View v) {
261                     // TODO Auto-generated method stub
262                     mp.start();
263                 }
264             });
265             
266             btn_m2=(Button) findViewById(R.id.music2);
267             btn_m2.setOnClickListener(new Button.OnClickListener(){
268                 
269                 public void onClick(View v) {
270                     // TODO Auto-generated method stub
271                     stop();
272                 }
273             });
274 
275             btn_m3=(Button) findViewById(R.id.music3);
276             btn_m3.setOnClickListener(new Button.OnClickListener(){
277                 
278                 public void onClick(View v) {
279                     // TODO Auto-generated method stub
280                     mp.pause();
281                 }
282             });
283             
284             btn_eq=(Button) findViewById(R.id.btn_eq);
285             btn_eq.setOnClickListener(new Button.OnClickListener(){
286                 
287                 public void onClick(View v) {
288                     // TODO Auto-generated method stub
289                     if(b==1)
290                     {
291                         if(editText.getText().toString().length()!=0)
292                         {
293                             try
294                             {
295                                 x=Integer.parseInt(editText.getText().toString());
296                                 if(x>=0 && x<=5)b++;
297                                 else Toast.makeText(MainActivity.this, "輸入有誤", 1).show();
298                             }
299                             catch(NumberFormatException x)
300                             {
301                                 Toast.makeText(MainActivity.this, "輸入有誤", 1).show();
302                             }
303                         }
304                         else Toast.makeText(MainActivity.this, "輸入有誤", 1).show();
305                         editText.setText("");
306                         number_1="";
307                         number_2="";
308                         style=0;
309                         clicked=false;
310                         text.setLength(0);
311                 begin=System.currentTimeMillis();
312                     }
313                     if(b==2)
314                     {
315                         if(n!=0)anser[i-2]=Float.parseFloat(editText.getText().toString());
316                         str1="第"+i+"道題目為:";
317                         n=(int)(Math.random() * 4 + 2);//隨機出運算子的數量
318                         zz=(int)(Math.random()*2);
319                         for(int j=0;j<n;j++)
320                         {
321                             //zf=(int)(Math.random()*2);
322                             //if(zf==0)//323                             //    num1[j]=-(int)(Math.random()*100);//產生隨機數
324                             //else        //
325                                 num1[j]=(int)(Math.random()*100);
326                                 if(zz==1)num1[j]=(int)(Math.random()*10+1);
327                         }
328                         for(int k=0;k<n-1;k++)
329                         {
330                             nov[k]=(int)(Math.random()*4);
331                             if(nov[k]==3&&num1[k+1]==0)
332                             {
333                                 do
334                                 {
335                                     num1[k+1]=(int)(Math.random()*100);
336                                 }while(num1[k+1]==0);
337                             }
338                         }
339                         str="";
340                         if(zz==0)
341                         {
342                             for(int j=0;j<n;j++)
343                             {
344                                 //if(num1[j]<0)str=str+"("+String.valueOf(num1[j])+")";
345                                 str=str+String.valueOf(num1[j]);
346                                 if(j==n-1)
347                                 {
348                                     //try
349                                     //{
350                                         //int ii=0;
351                                         try{
352                                             trueanser[i-1]=opt.Math(str);
353                                             DecimalFormat df = new DecimalFormat("#.00");
354                                             trueanser[i-1]=Float.parseFloat(df.format(trueanser[i-1]));
355                                         } catch (Exception e1) {
356                                             // TODO 自動生成的 catch 塊
357                                             e1.printStackTrace();
358                                         }
359                                     //}
360                                     /*catch (Exception e1)
361                                     {
362                                         System.out.println(e1);
363                                         //e1.printStackTrace();
364                                     }*/
365                                     str=str+"=";
366                                     //str=str+String.valueOf(trueanser[i-1]);
367                                     xs.setText(str1+str);
368                                     break;
369                                 }
370                                 str=str+op[nov[j]];
371                             }
372                         }
373                         if(zz==1)
374                         {
375                             trueanser[i-1]=1;
376                             str=String.valueOf(num1[0])+"!=";
377                             for(int j=1;j<=num1[0];j++)
378                             trueanser[i-1]=trueanser[i-1]*j;
379                             //str=str+String.valueOf(trueanser[i-1]);
380                             xs.setText(str1+str);
381                         }
382                         if(i==x+1)
383                         {
384                             b=3;
385                             anser[i-2]=Float.parseFloat(editText.getText().toString());
386                         }
387                         else i++;
388                         editText.setText("");
389                         number_1="";
390                         number_2="";
391                         style=0;
392                         clicked=false;
393                         text.setLength(0);
394                     }
395                     if(b==3)
396                     {
397                         ss="";
398                         y=0;
399                         for(int j=0;j<x;j++)
400                         {
401                             if(anser[j]==trueanser[j])y++;
402                             ss=ss+(j+1)+":"+trueanser[j]+";\n";
403                         }
404                         end=System.currentTimeMillis();
405                         time=(end-begin)/1000;
406                         xs.setText("答題完成!答對"+y+"道!\n"+"用時:"+time+"s  正確答案:");
407                         editText.setSingleLine(false); 
408                         editText.setHorizontallyScrolling(false); 
409                         editText.setText(ss);
410                         
411                         b=0;
412                         number_1="";
413                         number_2="";
414                         style=0;
415                         clicked=false;
416                         text.setLength(0);
417                     }
418                 }
419             });
420             start=(Button) findViewById(R.id.start);
421             start.setOnClickListener(new Button.OnClickListener(){
422                 
423                 public void onClick(View v) {
424                     // TODO Auto-generated method stub
425                     xs.setText("請輸入出題數量!(1-5)");
426                     n=0;
427                     i=1;
428                     b=1;
429                 }
430             });
431             btn_clear=(Button) findViewById(R.id.btn_clear);
432             btn_clear.setOnClickListener(new Button.OnClickListener(){
433                 
434                 public void onClick(View v) {
435                     // TODO Auto-generated method stub
436                     editText.setText("");
437                     number_1="";
438                     number_2="";
439                     style=0;
440                     clicked=false;
441                     text.setLength(0);
442                 }
443             });
444         }
445     }
MainActivity
  1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2     android:layout_width="fill_parent"
  3     android:layout_height="fill_parent"
  4     android:orientation="vertical"  
  5 android:background="@drawable/a1"
  6 >
  7     
  8     <TextView
  9         android:id="@+id/xs1"
 10         android:layout_width="wrap_content"
 11         android:layout_height="wrap_content"
 12         
 13         android:singleLine="true"
 14         android:ellipsize="marquee"
 15         android:focusable="true"
 16         android:focusableInTouchMode="true"
 17         
 18         android:text="歡迎使用四則運算程式 ! ! !"
 19         android:textColor="#ffd700"
 20         android:textSize="28sp" >
 21 
 22         <requestFocus />
 23     </TextView>
 24 
 25     <EditText
 26         android:hint="此處顯示題目"
 27         android:id="@+id/xs"
 28         android:layout_width="wrap_content"
 29         android:layout_height="wrap_content"
 30         android:ems="20"
 31         android:focusable="false"
 32         
 33         >
 34 
 35         <requestFocus />
 36     </EditText>
 37 
 38     
 39     
 40     
 41     <EditText
 42         android:id="@+id/result"
 43         android:layout_width="match_parent"
 44         android:layout_height="wrap_content"
 45         android:cursorVisible="false"
 46         android:digits="1234567890."
 47         android:ems="20"
 48         android:focusable="false"
 49         android:numeric="decimal"
 50         android:singleLine="true" />
 51 
 52     <TableLayout
 53         android:layout_width="fill_parent"
 54         android:layout_height="wrap_content"
 55         android:stretchColumns="0,1,2,3" >
 56 
 57         <TableRow>
 58 
 59             <Button
 60                 android:id="@+id/btn_1"
 61                 android:text="7" />
 62 
 63             <Button
 64                 android:id="@+id/btn_2"
 65                 android:text="8" />
 66 
 67             <Button
 68                 android:id="@+id/btn_3"
 69                 android:text="9" />
 70         </TableRow>
 71 
 72         <TableRow>
 73 
 74             <Button
 75                 android:id="@+id/btn_4"
 76                 android:text="4" />
 77 
 78             <Button
 79                 android:id="@+id/btn_5"
 80                 android:text="5" />
 81 
 82             <Button
 83                 android:id="@+id/btn_6"
 84                 android:text="6" />
 85         </TableRow>
 86 
 87         <TableRow>
 88 
 89             <Button
 90                 android:id="@+id/btn_7"
 91                 android:text="1" />
 92 
 93             <Button
 94                 android:id="@+id/btn_8"
 95                 android:text="2" />
 96 
 97             <Button
 98                 android:id="@+id/btn_9"
 99                 android:text="3" />
100         </TableRow>
101 
102         <TableRow>
103 
104             <Button
105                 android:id="@+id/btn_dot"
106                 android:text="." />
107 
108             <Button
109                 android:id="@+id/btn_0"
110                 android:text="0" />
111 
112             <Button
113                 android:id="@+id/btn_10"
114                 android:text="-" />
115         </TableRow>
116     </TableLayout>
117 
118     <TableLayout
119         android:layout_width="match_parent"
120         android:layout_height="wrap_content" >
121 
122         <TableRow
123             android:id="@+id/tableRow1"
124             android:layout_width="wrap_content"
125             android:layout_height="wrap_content" >
126 
127             <Button
128                 android:id="@+id/start"
129                 android:layout_width="105.0dip"
130                 android:layout_height="50.0dip"
131                 android:text="開始" />
132 
133             <Button
134                 android:id="@+id/btn_eq"
135                 android:layout_width="105.0dip"
136                 android:layout_height="50.0dip"
137                 android:text="確定" />
138 
139             <Button
140                 android:id="@+id/btn_clear"
141                 android:layout_width="105.0dip"
142                 android:layout_height="50.0dip"
143                 android:text="清除" />
144 
145         </TableRow>
146 
147         <TableRow
148             android:id="@+id/tableRow2"
149             android:layout_width="wrap_content"
150             android:layout_height="wrap_content" >
151 
152             <TextView
153                 android:id="@+id/textView1"
154                 android:layout_width="wrap_content"
155                 android:layout_height="wrap_content"
156                 android:text="" />
157 
158         </TableRow>
159 
160         <TableRow
161             android:id="@+id/tableRow3"
162             android:layout_width="wrap_content"
163             android:layout_height="wrap_content" >
164 
165             <TextView
166                 android:id="@+id/textView2"
167                 android:layout_width="wrap_content"
168                 android:layout_height="wrap_content"
169                 android:text="" />
170 
171         </TableRow>
172 
173         <TableRow
174             android:id="@+id/tableRow4"
175             android:layout_width="wrap_content"
176             android:layout_height="wrap_content" >
177 
178             <Button
179                 android:id="@+id/music1"
180                 android:layout_width="wrap_content"
181                 android:layout_height="wrap_content"
182                 android:text="播放" />
183 
184             <Button
185                 android:id="@+id/music3"
186                 android:layout_width="wrap_content"
187                 android:layout_height="wrap_content"
188                 android:text="暫停" />
189 
190             <Button
191                 android:id="@+id/music2"
192                 android:layout_width="wrap_content"
193                 android:layout_height="wrap_content"
194                 android:text="停止" />
195 
196         </TableRow>
197     </TableLayout>
198     
199 
200 </LinearLayout>
fragment_main
 1 package com.example.add;
 2 import java.util.Stack;
 3 public class opt
 4 {
 5     public float Math(String str) throws Exception
 6     { 
 7         String[] operater =new String[20]; 
 8         String[] number = new String[20]; 
 9         Stack countStack1 = new Stack(); 
10         Stack countStack2 = new Stack(); 
11         float result =0;
12         float x=0;
13         number = str.split("\\/|\\*|\\+|\\-"); 
14         operater= str.split("\\d+");
15         if(number.length<2)throw new Exception("請輸入兩位計算數以上!");
16         for(int i = 0; i<number.length;i++)
17         {
18             try
19             {
20                 x=Float.parseFloat(number[i]);
21             }
22             catch(NumberFormatException e)
23             {
24                 throw new Exception("輸入錯誤!請重新輸入!");
25             }
26             if(operater[i].equals("/"))if(x==0)throw new Exception("除數不能為0!");
27             countStack1.push(number[i]);
28             if(i!=number.length-1)
29             {
30                 if(operater[i+1]!=null)countStack1.push(operater[i+1]);
31             }
32         }
33         while(!countStack1.isEmpty())countStack2.push(countStack1.pop());
34         String op;
35         while(!countStack2.isEmpty())
36         { 
37             result=0;
38             op=countStack2.pop().toString();
39             if(op.equals("*"))
40             {
41                 result=Float.parseFloat(countStack1.pop().toString())*Float.parseFloat(countStack2.pop().toString());
42                 if(number.length==2)return result;
43                 countStack1.push(result);
44                 continue;
45             }
46             if(op.equals("/"))
47             {
48                 result=Float.parseFloat(countStack1.pop().toString())/Float.parseFloat(countStack2.pop().toString());
49                 if(number.length==2)return result;
50                 countStack1.push(result);
51                 continue;
52             }
53             countStack1.push(op);
54         }
55         while(!countStack1.isEmpty())countStack2.push(countStack1.pop());
56         while(!countStack2.isEmpty())
57         {
58             result=0;
59             op = countStack2.pop().toString();
60             if(op.equals("+"))
61             {
62                 result=Float.parseFloat(countStack1.pop().toString())+Float.parseFloat(countStack2.pop().toString());
63                 countStack1.push(result);
64                 continue;
65             }
66             if(op.equals("-"))
67             {
68                 result=Float.parseFloat(countStack1.pop().toString())-Float.parseFloat(countStack2.pop().toString());
69                 countStack1.push(result);
70                 continue;
71             }
72             countStack1.push(op);
73         }
74         return result;
75     }
76 }
opt

 

音樂檔案就不發啦,只要自行丟一個MP3檔案到res/raw裡,改名為unity或者到程式碼裡更改檔名都可

 

PS:送上背景圖片~

相關文章