制作一个简易计算器——基于Android Studio实现

一个计算器Android程序的源码部分分为主干和细节两部分。

一、主干

1. 主干的构成

  • 计算器的布局
  • 事件(即计算器上的按钮、文本框)监听
  • 实现计算

2. 详细解释

  假设我们的项目名为Calculator,而布局名称(Layout Name)为默认的activity_main 。即设置如下图所示:

  在这种前提下,有:

  • 设置计算器布局的文件:Calculator/app/src/main/res/layout/activity_main.xml
  • 事件监听和计算实现在同一个文件里:Calculator/app/src/main/java/下的一个子目录里的MainActivity.java

  即如下图所示:

3. 主干代码部分

  • 计算器布局代码(写在activity_main.xml文件里):

  1 <?xml version="1.0" encoding="utf-8"?>
  2 <ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
  3     android:layout_width="fill_parent"
  4     android:layout_height="wrap_content"
  5     >
  6     <LinearLayout
  7         android:layout_width="fill_parent"
  8         android:layout_height="fill_parent"
  9         android:orientation="vertical" >
 10         <EditText
 11             android:id="@+id/input"
 12             android:layout_width="fill_parent"
 13             android:layout_height="wrap_content"
 14             android:layout_gravity="center"
 15             android:editable="false"
 16             android:hint="@string/shuru" />
 17
 18         <EditText
 19             android:id="@+id/output"
 20             android:layout_width="fill_parent"
 21             android:layout_height="wrap_content"
 22             android:layout_gravity="center"
 23             android:editable="true"
 24             android:gravity="right"
 25             android:hint="@string/shuchu" />
 26
 27         <RelativeLayout
 28             android:layout_width="fill_parent"
 29             android:layout_height="wrap_content" >
 30
 31             <Button
 32                 android:id="@+id/seven"
 33                 android:layout_width="80dp"
 34                 android:layout_height="70dp"
 35                 android:layout_alignParentLeft="true"
 36                 android:text="@string/seven"
 37                 android:textSize="40sp" />
 38
 39             <Button
 40                 android:id="@+id/eight"
 41                 android:layout_width="80dp"
 42                 android:layout_height="70dp"
 43                 android:layout_toRightOf="@id/seven"
 44                 android:text="@string/eight"
 45                 android:textSize="40sp" />
 46
 47             <Button
 48                 android:id="@+id/nine"
 49                 android:layout_width="80dp"
 50                 android:layout_height="70dp"
 51                 android:layout_toRightOf="@id/eight"
 52                 android:text="@string/nine"
 53                 android:textSize="40sp" />
 54
 55             <Button
 56                 android:id="@+id/add"
 57                 android:layout_width="80dp"
 58                 android:layout_height="70dp"
 59                 android:layout_alignParentRight="true"
 60                 android:layout_toRightOf="@id/nine"
 61                 android:text="@string/add"
 62                 android:textSize="40sp" />
 63
 64             <Button
 65                 android:id="@+id/four"
 66                 android:layout_width="80dp"
 67                 android:layout_height="70dp"
 68                 android:layout_alignParentLeft="true"
 69                 android:layout_below="@id/seven"
 70                 android:text="@string/four"
 71                 android:textSize="40sp" />
 72
 73             <Button
 74                 android:id="@+id/five"
 75                 android:layout_width="80dp"
 76                 android:layout_height="70dp"
 77                 android:layout_below="@id/eight"
 78                 android:layout_toRightOf="@id/four"
 79                 android:text="@string/five"
 80                 android:textSize="40sp" />
 81
 82             <Button
 83                 android:id="@+id/six"
 84                 android:layout_width="80dp"
 85                 android:layout_height="70dp"
 86                 android:layout_below="@id/nine"
 87                 android:layout_toRightOf="@id/five"
 88                 android:text="@string/six"
 89                 android:textSize="40sp" />
 90
 91             <Button
 92                 android:id="@+id/subtract"
 93                 android:layout_width="80dp"
 94                 android:layout_height="70dp"
 95                 android:layout_alignParentRight="true"
 96                 android:layout_below="@id/add"
 97                 android:layout_toRightOf="@id/six"
 98                 android:text="@string/subtract"
 99                 android:textSize="40sp" />
100
101             <Button
102                 android:id="@+id/one"
103                 android:layout_width="80dp"
104                 android:layout_height="70dp"
105                 android:layout_alignParentLeft="true"
106                 android:layout_below="@id/four"
107                 android:text="@string/one"
108                 android:textSize="40sp" />
109
110             <Button
111                 android:id="@+id/two"
112                 android:layout_width="80dp"
113                 android:layout_height="70dp"
114                 android:layout_below="@id/five"
115                 android:layout_toRightOf="@id/one"
116                 android:text="@string/two"
117                 android:textSize="40sp" />
118
119             <Button
120                 android:id="@+id/three"
121                 android:layout_width="80dp"
122                 android:layout_height="70dp"
123                 android:layout_below="@id/six"
124                 android:layout_toRightOf="@id/two"
125                 android:text="@string/three"
126                 android:textSize="40sp" />
127
128             <Button
129                 android:id="@+id/multiply"
130                 android:layout_width="80dp"
131                 android:layout_height="70dp"
132                 android:layout_alignParentRight="true"
133                 android:layout_below="@id/subtract"
134                 android:layout_toRightOf="@id/three"
135                 android:text="@string/multiply"
136                 android:textSize="40sp" />
137
138             <Button
139                 android:id="@+id/zero"
140                 android:layout_width="80dp"
141                 android:layout_height="70dp"
142                 android:layout_alignParentLeft="true"
143                 android:layout_below="@id/one"
144                 android:text="@string/zero"
145                 android:textSize="40sp" />
146
147             <Button
148                 android:id="@+id/clear"
149                 android:layout_width="80dp"
150                 android:layout_height="70dp"
151                 android:layout_below="@id/two"
152                 android:layout_toRightOf="@id/zero"
153                 android:text="@string/clear"
154                 android:textSize="40sp" />
155
156             <Button
157                 android:id="@+id/result"
158                 android:layout_width="80dp"
159                 android:layout_height="70dp"
160                 android:layout_below="@id/three"
161                 android:layout_toRightOf="@id/clear"
162                 android:text="@string/result"
163                 android:textSize="40sp" />
164
165             <Button
166                 android:id="@+id/divide"
167                 android:layout_width="80dp"
168                 android:layout_height="70dp"
169                 android:layout_alignParentRight="true"
170                 android:layout_below="@id/multiply"
171                 android:layout_toRightOf="@id/result"
172                 android:text="@string/divide"
173                 android:textSize="40sp" />
174
175             <Button
176                 android:id="@+id/dot"
177                 android:layout_width="80dp"
178                 android:layout_height="70dp"
179                 android:layout_alignParentLeft="true"
180                 android:layout_below="@id/zero"
181                 android:text="@string/dot"
182                 android:textSize="40sp" />
183             <Button
184                 android:id="@+id/writeButton"
185                 android:layout_width="wrap_content"
186                 android:layout_height="wrap_content"
187                 android:layout_alignParentLeft="true"
188                 android:layout_below="@id/dot"
189                 android:text="@string/write"
190                 android:textSize="40sp" />
191             <Button
192                 android:id="@+id/readButton"
193                 android:layout_width="wrap_content"
194                 android:layout_height="wrap_content"
195                 android:layout_alignParentRight="true"
196                 android:layout_below="@id/dot"
197                 android:text="@string/read"
198                 android:textSize="40sp" />
199
200             <CheckBox
201                 android:id="@+id/appendBox"
202                 android:text="@string/appendBox"
203                 android:layout_width="wrap_content"
204                 android:layout_height="wrap_content"
205                 android:layout_alignParentBottom="true"
206                 android:layout_toLeftOf="@+id/divide"
207                 android:layout_toStartOf="@+id/divide"
208                 android:layout_marginBottom="12dp"
209                 />
210
211         </RelativeLayout>
212
213         <EditText
214
215             android:layout_width="match_parent"
216             android:layout_height="wrap_content"
217             android:id="@+id/textView" />
218
219         <EditText
220
221             android:layout_width="match_parent"
222             android:layout_height="wrap_content"
223             android:id="@+id/displayView" />
224
225         <EditText
226             android:id="@+id/errorzero"
227             android:layout_width="fill_parent"
228             android:layout_height="wrap_content"
229             android:layout_gravity="center"
230             android:editable="false"
231             android:gravity="center"
232             />
233         <EditText
234             android:id="@+id/resultText"
235             android:layout_width="fill_parent"
236             android:layout_height="wrap_content"
237             android:layout_gravity="center"
238             android:editable="false"
239             android:gravity="left"
240             android:text="@string/resultText"
241             />
242     </LinearLayout>
243 </ScrollView>

  • 事件监听和实现计算代码(写在MainActivity.java文件里)

  1 package com.example.lenovo.calculator;
  2
  3
  4
  5         import android.app.Activity;
  6         import android.content.Context;
  7         import android.os.Bundle;
  8         import android.view.View;
  9         import android.view.View.OnClickListener;
 10         import android.widget.Button;
 11         import android.widget.CheckBox;
 12         import android.widget.EditText;
 13
 14         import java.io.FileInputStream;
 15         import java.io.FileNotFoundException;
 16         import java.io.FileOutputStream;
 17         import java.io.IOException;
 18
 19 public class MainActivity extends Activity {
 20     /**
 21      * Called when the activity is first created.
 22      */
 23     private EditText output = null;
 24     private EditText input = null;
 25     private Button btn0 = null;
 26     private Button btn1 = null;
 27     private Button btn2 = null;
 28     private Button btn3 = null;
 29     private Button btn4 = null;
 30     private Button btn5 = null;
 31     private Button btn6 = null;
 32     private Button btn7 = null;
 33     private Button btn8 = null;
 34     private Button btn9 = null;
 35     private Button btnadd = null;
 36     private Button btnsubtract = null;
 37     private Button btnmultiply = null;
 38     private Button btndivide = null;
 39     private Button btnclear = null;
 40     private Button btnresult = null;
 41     private Button btndot = null;
 42
 43     private EditText errorzero = null;
 44
 45     private EditText resultText = null;
 46     private Button writeButton = null;
 47     private Button readButton = null;
 48     private CheckBox appendBox = null;
 49     private EditText textView = null;
 50     private EditText displayView = null;
 51     public String FILE_NAME = "fileDemo.txt";
 52
 53
 54     private String str = "";//保存数字
 55     private String strold = "";//原数字
 56     private char act = ‘ ‘;//记录“加减乘除等于”符号
 57     private int count = 0;//判断要计算的次数,如果超过一个符号,先算出来一部分
 58     private Float result = null;//计算的输出结果
 59     private Boolean errBoolean = false;//有错误的时候为true,无错为false
 60     private Boolean flagBoolean = false;//一个标志,如果为true,可以响应运算消息,如果为false,不响应运算消息,只有前面是数字才可以响应运算消息
 61     private Boolean flagDot = false; //小数点标志位
 62
 63
 64
 65     @Override
 66     public void onCreate(Bundle savedInstanceState) {
 67         super.onCreate(savedInstanceState);
 68         setContentView(R.layout.activity_main);
 69
 70         output = (EditText) findViewById(R.id.output);
 71         input = (EditText) findViewById(R.id.input);
 72
 73         errorzero = (EditText) findViewById(R.id.errorzero);
 74         resultText = (EditText) findViewById(R.id.resultText);
 75         writeButton = (Button) findViewById(R.id.writeButton);
 76         readButton = (Button) findViewById(R.id.readButton);
 77         textView = (EditText) findViewById(R.id.textView);
 78         displayView = (EditText) findViewById(R.id.displayView);
 79         appendBox = (CheckBox) findViewById(R.id.appendBox);
 80
 81         btn0 = (Button) findViewById(R.id.zero);
 82         btn1 = (Button) findViewById(R.id.one);
 83         btn2 = (Button) findViewById(R.id.two);
 84         btn3 = (Button) findViewById(R.id.three);
 85         btn4 = (Button) findViewById(R.id.four);
 86         btn5 = (Button) findViewById(R.id.five);
 87         btn6 = (Button) findViewById(R.id.six);
 88         btn7 = (Button) findViewById(R.id.seven);
 89         btn8 = (Button) findViewById(R.id.eight);
 90         btn9 = (Button) findViewById(R.id.nine);
 91         btnadd = (Button) findViewById(R.id.add);
 92         btnsubtract = (Button) findViewById(R.id.subtract);
 93         btnmultiply = (Button) findViewById(R.id.multiply);
 94         btndivide = (Button) findViewById(R.id.divide);
 95         btnclear = (Button) findViewById(R.id.clear);
 96         btnresult = (Button) findViewById(R.id.result);
 97         btndot = (Button) findViewById(R.id.dot);
 98         //设置按钮侦听事件
 99         btn0.setOnClickListener(listener);
100         btn1.setOnClickListener(listener);
101         btn2.setOnClickListener(listener);
102         btn3.setOnClickListener(listener);
103         btn4.setOnClickListener(listener);
104         btn5.setOnClickListener(listener);
105         btn6.setOnClickListener(listener);
106         btn7.setOnClickListener(listener);
107         btn8.setOnClickListener(listener);
108         btn9.setOnClickListener(listener);
109         //执行运算
110         btnadd.setOnClickListener(listener);
111         btnsubtract.setOnClickListener(listener);
112         btnmultiply.setOnClickListener(listener);
113         btndivide.setOnClickListener(listener);
114         btnclear.setOnClickListener(listener);
115         btnresult.setOnClickListener(listener);
116
117         btndot.setOnClickListener(listener);
118
119         writeButton.setOnClickListener(writelistener);
120         readButton.setOnClickListener(readlistener);
121
122
123         // ATTENTION: This was auto-generated to implement the App Indexing API.
124         // See https://g.co/AppIndexing/AndroidStudio for more information.
125     }
126
127
128     private OnClickListener listener = new OnClickListener() {
129
130         public void onClick(View v) {
131             // TODO Auto-generated method stub
132             switch (v.getId()) {
133                 //输入数字
134                 case R.id.zero:
135                     num(0);
136                     break;
137                 case R.id.one:
138                     num(1);
139                     break;
140                 case R.id.two:
141                     num(2);
142                     break;
143                 case R.id.three:
144                     num(3);
145                     break;
146                 case R.id.four:
147                     num(4);
148                     break;
149                 case R.id.five:
150                     num(5);
151                     break;
152                 case R.id.six:
153                     num(6);
154                     break;
155                 case R.id.seven:
156                     num(7);
157                     break;
158                 case R.id.eight:
159                     num(8);
160                     break;
161                 case R.id.nine:
162                     num(9);
163                     break;
164
165                 case R.id.dot:
166                     dot();
167                     break;
168                 //执行运算
169                 case R.id.add:
170                     add();
171                     break;
172                 case R.id.subtract:
173                     sub();
174                     break;
175                 case R.id.multiply:
176                     multiply();
177                     break;
178                 case R.id.divide:
179                     divide();
180                     break;
181                 case R.id.clear:
182                     clear();
183                     break;
184                 //计算结果
185                 case R.id.result:
186                     result();
187                     if (!errBoolean && flagBoolean) {
188                         output.setText(String.valueOf(result));
189                     }
190                     resultText.setText(strold + act + str + "=" + result+"                          ");
191                     break;
192
193                 default:
194                     break;
195
196             }
197             input.setText(strold + act + str);
198             output.setText(String.valueOf(result));
199
200
201         }
202     };
203
204     private OnClickListener writelistener = new OnClickListener() {
205         @Override
206         public void onClick(View view) {
207             //textView.setText("");
208
209             FileOutputStream fos = null;
210             try {
211                 if (appendBox.isChecked()) {
212                     fos = openFileOutput(FILE_NAME, Context.MODE_APPEND);
213                 } else {
214                     fos = openFileOutput(FILE_NAME, Context.MODE_PRIVATE);
215                 }
216                 String text = resultText.getText().toString();
217                 fos.write(text.getBytes());
218                 textView.setText("文件写入成功,写入长度:" + text.length());
219                 //resultText.setText("");
220
221             } catch (FileNotFoundException e) {
222                 e.printStackTrace();
223             } catch (IOException e) {
224                 e.printStackTrace();
225             }
226             finally {
227                 if (fos != null)
228                     try {
229                         fos.flush();
230                         fos.close();
231                     } catch (IOException e) {
232                         e.printStackTrace();
233                     }
234             }
235         }
236     };
237     private OnClickListener readlistener = new OnClickListener() {
238         @Override
239         public void onClick(View view) {
240
241             displayView.setText("");
242             FileInputStream fis = null;
243             try {
244                 fis = openFileInput(FILE_NAME);
245                 if (fis.available() == 0) {
246                     return;
247                 }
248                 byte[] readBytes = new byte[fis.available()];
249                 while (fis.read(readBytes) != -1) {
250
251                 }
252                 String text = new String(readBytes);
253                 displayView.setText(text);
254                 textView.setText("文件读取成功,写入长度:" + text.length());
255
256             } catch (FileNotFoundException e) {
257                 e.printStackTrace();
258             } catch (IOException e) {
259                 e.printStackTrace();
260             }
261
262         }
263     };
264
265     private void dot() {
266         // TODO Auto-generated method stub
267
268         if (!flagDot) {
269             str = str + ".";
270             flagBoolean = false;
271             flagDot = true;
272         }
273     }
274
275     private void clear() {
276         // TODO Auto-generated method stub
277         str = strold = "";
278         count = 0;
279         act = ‘ ‘;
280         result = null;
281         flagBoolean = false;
282         flagDot = false;
283         input.setText(strold + act + str);
284         output.setText("");
285         errorzero.setText("");
286         displayView.setText("");
287         textView.setText("");
288         resultText.setText("");
289     }
290
291     private void divide() {
292         // TODO Auto-generated method stub
293         if (flagBoolean) {
294             check();
295             act = ‘/‘;
296             flagBoolean = false;
297         }
298     }
299
300     private void multiply() {
301         // TODO Auto-generated method stub
302         if (flagBoolean) {
303             check();
304             act = ‘*‘;
305             flagBoolean = false;
306         }
307     }
308
309     private void sub() {
310         // TODO Auto-generated method stub
311         if (flagBoolean) {
312             check();
313             act = ‘-‘;
314             flagBoolean = false;
315         }
316     }
317
318     private void add() {
319         // TODO Auto-generated method stub
320         if (flagBoolean) {
321             check();
322             act = ‘+‘;
323             flagBoolean = false;
324         }
325     }
326
327     private void check() {
328         // TODO Auto-generated method stub
329         if (count >= 1) {
330             result();
331             str = String.valueOf(result);
332         }
333         strold = str;
334         str = "";
335         count++;
336         flagDot = false;
337         errorzero.setText("");
338     }
339
340     //计算输出结果
341     private void result() {
342         // TODO Auto-generated method stub
343         if (flagBoolean) {
344             Float a, b;
345
346             a = Float.parseFloat(strold);
347             b = Float.parseFloat(str);
348
349             if (b == 0 && act == ‘/‘) {
350                 clear();
351                 errorzero.setText("除数不能为零!");
352                 //output.setText("除数不能为零!");
353
354
355                 //errBoolean=true;
356             }
357
358
359             if (!errBoolean) {
360                 switch (act) {
361                     case ‘+‘:
362                         result = a + b;
363                         break;
364                     case ‘-‘:
365                         result = a - b;
366                         break;
367                     case ‘*‘:
368                         result = a * b;
369                         break;
370                     case ‘/‘:
371                         result = a / b;
372                         break;
373
374                     default:
375                         break;
376                 }
377             }
378
379
380         }
381     }
382
383     private void num(int i) {
384         // TODO Auto-generated method stub
385         str = str + String.valueOf(i);
386         flagBoolean = true;
387         errorzero.setText("");
388     }
389
390 }

二、细节

  仅仅将主干部分代码copy下来并不能运行程序,因为主干代码调用了一些文件的代码,这些文件就是我们所说的细节。

1. 字符串资源

  • 文件位置:Calculator/app/src/main/res/values/strings.xml
  • 代码部分:

 1 <resources>
 2     <string name="app_name">Calculator</string>
 3     <string name="action_settings">Settings</string>
 4         <string name="zero">0</string>
 5         <string name="one">1</string>
 6         <string name="two">2</string>
 7         <string name="three">3</string>
 8         <string name="four">4</string>
 9         <string name="five">5</string>
10         <string name="six">6</string>
11         <string name="seven">7</string>
12         <string name="eight">8</string>
13         <string name="nine">9</string>
14         <string name="add">+</string>
15         <string name="subtract">-</string>
16         <string name="multiply">*</string>
17         <string name="divide">/</string>
18         <string name="clear">CE</string>
19         <string name="result">=</string>
20         <string name="shuru">请按数字键盘输入数字</string>
21         <string name="shuchu">计算器输出结果</string>
22         <string name="dot">.</string>
23         <string name="write">写入</string>
24         <string name="read">读取</string>
25         <string name="resultText">计算式</string>
26         <string name="appendBox">追加模式</string>
27
28 </resources>

2. 其他可能要改的文件

  • Calculator/app/src/main/res/drawable:设置相关的背景颜色、按钮特效
  • Calculator/app/src/main/AndroidManifest.xml:设置这个项目的整体配置

三、备注

  1. 本文提供的简易计算器仅需要修改前三个文件(布局文件、监听实现文件、字符串资源文件)
  2. 纯复制粘贴是一定会报错的,留意一点将有些地方改动一下
时间: 2025-01-05 00:39:12

制作一个简易计算器——基于Android Studio实现的相关文章

JS制作一个简易计算器

//javascript简易计算器 <!DOCTYPE html> <html>  <head>   <title> 事件</title>     <script type="text/javascript">    function count(){             //获取第一个输入框的值     var node1=document.getElementById('txt1').value;     

使用cocos制作一个简易的小闹钟

使用cocos制作一个简易的小闹钟 本文转载至学习使用Cocos制作<闹钟> 使用的引擎版本是cocos2.1 具体开发过程指导 (1)Cocos Studio部分 1.打开Cocos工具,新建一个项目: 2.设置好相关的配置,点击完成,从而发布到Cocos Studio中: 3.Cocos Studio IDE介绍: 左上角的是开发常用的游戏元素.UI控件.容器等,可以像VS2013一样拖拽,并在右边设置对应的属性:左下角是资源导入,可以导入所需的图片背景:下面是时间戳,用于设置基于时间戳的

导入开源库到基于Android Studio构建的项目中

前两天,谷歌发布了Android Studio 1.0的正式版,也有更多的人开始迁移到Android Studio进行开发.然而,网上很多的开源库,控件等还是以前的基于Eclipse进行开发,很多人不知道怎么导入到自己的基于Android Studio项目中来,微博上也有人私信我,让我来写写,正好今天回来的比较早,就写写吧.主要介绍一下常见的一些导包的场景. 前言 --project //项目目录 | build.gradle //项目的gradle配置文件 | settings.gradle

《ArcGIS Runtime SDK for Android开发笔记》——基于Android Studio构建ArcGIS Android开发环境(离线部署)

1.前言 在上一篇的内容里我们介绍了基于Android Studio构建ArcGIS Runtime SDK for Android开发环境的基本流程,流程中我们采用的是基于Gradle的构建方式,在这种方式里主要通过设置maven仓库位置,设置编译选项.依赖版本在联网环境下下载对应SDK依赖包. 但是在网络情况不好的情况下这种方式就不行了,那怎么解决在离线环境或者内网环境实现开发流程呢?目前了解到的有两种方式: 1)配置内网环境maven仓库,预先缓存到内网环境下,然后离线调用. 2)采用直接

AndroidStudio制作一个简易的订餐交易小demo【日常小练习】

AndroidStudio模拟制作一个简易的订餐交易小demo[日常小练习]     ————安德风 一.最终效果图: 二.布局设计activity_main.xml 1 <?xml version="1.0" encoding="utf-8"?> 2 <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/a

c语言:编写一个简易计算器,打印菜单界面,实现加减乘除运算,可以退出菜单界面

.编写一个简易计算器 程序: #include<stdio.h> enum  OP { EXIT,//0 ADD,//1 SUB,//2 MUL,//3 DIV//4 }; void menu()//menu表示菜单 { printf("**** 1.add  ****\n"); printf("**** 2.sub  ****\n"); printf("**** 3.mul  ****\n"); printf("**** 

【移动终端软件开发】2017-2018秋学期教材《Android移动应用设计与开发(第2版)——基于Android Studio开发环境》

经过仔细比较,最终选定2017-2018秋季教材: <Android移动应用设计与开发(第2版)——基于Android Studio开发环境> 出版日期:2017-03-01  书号:978-7-115-44780-7  定价:49.80 元   页数:268 第1章 Android简介 11.1 Android发展概述 11.2 配置开发环境 31.2.1 安装JDK 31.2.2 安装Android Studio 51.2.3 安装SDK 51.3 本章小结 7习题 7 第2章 Andro

【FLEX&amp;YACC】第二天制作一个简单计算器

首先写词法分析器: 词法分析器要返回记号: "+" 返回ADD "-" 返回SUB "*" 返回MUL "/" 返回DIV 输入的实数全部被当作double类型处理 换行符返回CR calc.l: %{#include <stdio.h>#include "y.tab.h"int yywrap(void){ /*免链接库文件*/    return 1;}%}%%[ \t]    { ;}&qu

用XMLHttpRequest制作一个简易ajax

概述 jquery退出历史舞台之后,我们怎么来发送ajax请求呢?可以用相关的库,也可以自己制作一个简易的ajax. 需要说明的是,我们使用的是XMLHttpRequest 2,它几乎兼容所有主流浏览器:XMLHttpRequest advanced features 参考: stackoverflow答案 实现get请求 先从支持get请求开始,代码如下: function ajax(a, b, c){ // URL, callback, just a placeholder c = new