android 计算器
package etu.ecjtu.calculater; import org.hemingway.calculater.R; import android.app.Activity; import android.content.res.Configuration; import android.os.Bundle; import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.SubMenu; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.LinearLayout; import android.widget.Toast; public class CalculaterMain extends Activity implements View.OnClickListener { private EditText output; private EditText input; private Button btn0; private Button btn1; private Button btn2; private Button btn3; private Button btn4; private Button btn5; private Button btn6; private Button btn7; private Button btn8; private Button btn9; private Button btnadd; private Button btnsubtract; private Button btnmultiply; private Button btndivide; private Button btnclear; private Button btnresult; private String str;// 保存数字 private String strold; private char act;// 记录符号 private int count;// 判断要计算的次数,如果超过一个符号,先算出来一部分 private int result;// 计算的结果 private int err;// 无错误的时候为0 private int flag;// 一个标志,如果为1,可以响应运算消息,如果为0,不响应运算消息,只有前面是数字才可以响应运算消息 private int flag2;// 一个标志,如果为1,可以响应数字输入,如果为0,清屏! Button[] b = new Button[16]; // 存储键盘ID private int index = 0; // 设置用来轮流切换 /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); output = (EditText) findViewById(R.id.output); input = (EditText) findViewById(R.id.input); btn0 = (Button) findViewById(R.id.zero); btn1 = (Button) findViewById(R.id.one); btn2 = (Button) findViewById(R.id.two); btn3 = (Button) findViewById(R.id.three); btn4 = (Button) findViewById(R.id.four); btn5 = (Button) findViewById(R.id.five); btn6 = (Button) findViewById(R.id.six); btn7 = (Button) findViewById(R.id.seven); btn8 = (Button) findViewById(R.id.eight); btn9 = (Button) findViewById(R.id.nine); btnadd = (Button) findViewById(R.id.add); btnsubtract = (Button) findViewById(R.id.subtract); btnmultiply = (Button) findViewById(R.id.multiply); btndivide = (Button) findViewById(R.id.divide); btnclear = (Button) findViewById(R.id.clear); btnresult = (Button) findViewById(R.id.result); btn0.setOnClickListener(this); btn1.setOnClickListener(this); btn2.setOnClickListener(this); btn3.setOnClickListener(this); btn4.setOnClickListener(this); btn5.setOnClickListener(this); btn6.setOnClickListener(this); btn7.setOnClickListener(this); btn8.setOnClickListener(this); btn9.setOnClickListener(this); btnadd.setOnClickListener(this); btnsubtract.setOnClickListener(this); btnmultiply.setOnClickListener(this); btndivide.setOnClickListener(this); btnclear.setOnClickListener(this); btnresult.setOnClickListener(this); act = ' '; // = - * / 判断 str = ""; // 输入 strold = "";// 存储原输入 count = 0; // 计算次数 result = 0;// 输出 err = 0;// 处理异常,默认无异常 flag = 0;// 默认不能响应,按下第一个数字后改为1,可以响应 flag2 = 1; // 默认为1。计算result后改为0,不可以响应num,只可以响应act; int[] btn = { R.id.add, R.id.clear, R.id.divide, R.id.multiply, R.id.subtract, R.id.result, R.id.zero, R.id.one, R.id.two, R.id.three, R.id.four, R.id.five, R.id.six, R.id.seven, R.id.eight, R.id.nine }; for (int i = 0; i < btn.length; i ) { b[i] = (Button) findViewById(btn[i]); } } /** * 点击按钮 获取输入 */ public void onClick(View view) { // TODO Auto-generated method stub switch (view.getId()) { case R.id.zero: num(0); break; case R.id.one: num(1); break; case R.id.two: num(2); break; case R.id.three: num(3); break; case R.id.four: num(4); break; case R.id.five: num(5); break; case R.id.six: num(6); break; case R.id.seven: num(7); break; case R.id.eight: num(8); break; case R.id.nine: num(9); break; case R.id.add: add(); break; case R.id.subtract: sub(); break; case R.id.multiply: multiply(); break; case R.id.divide: divide(); break; case R.id.clear: clear(); break; case R.id.result: result(); if (err != 1 && flag != 0) // 无异常,可响应输入 output.setText(String.valueOf(result)); // 输出显示 break; default: break; } input.setText(strold act str); // 设置输入显示 } /** * 读取输入的数字 * * @param n */ public void num(int n) { if (flag2 == 0) { // 已经计算结果 clear(); // 清屏 flag = 1;// 设置可响应运算 } else { str = str String.valueOf(n);// 非计算结果,可响应数字 flag = 1; // 设置可响应运算 } } /** * 加法计算 */ public void add() { if (flag != 0) { // 可响应 运算 check(); // 判断 act = ' '; flag = 0; // 设置不可响应运算 flag2 = 1;// 设置可响应数字输入 } } /** * 减法计算 */ public void sub() { if (flag != 0) { check(); act = '-'; flag = 0; flag2 = 1; } } /** * 乘法计算 */ public void multiply() { if (flag != 0) { check(); act = '*'; flag = 0; flag2 = 1; } } /** * 除法计算 */ public void divide() { if (flag != 0) { check(); act = '/'; flag = 0; flag2 = 1; } } /** * 清屏 */ public void clear() { str = strold = ""; count = 0; act = ' '; result = 0; err = 0; // 无异常 flag = 0; // 设置可响应运算 flag2 = 1;// 设置可响应数字输入 input.setText(strold act str); output.setText(""); } /** * 检查 */ public void check() { if (count >= 1) { // 如果有运算 result(); // 计算结果 str = String.valueOf(result); } strold = str; str = ""; count ; } /** * 计算结果 */ public void result() { int a, b; a = Integer.parseInt(strold); b = Integer.parseInt(str); if (flag != 0) { // 可以响应运算 if (b == 0 && act == '/') { // 除数为0,并且是除法运算 clear(); output.setText("除数不能为零!按C键重新计算"); err = 1;// 异常 } result = 0; if (err != 1) { // 无异常 switch (act) { case ' ': result = a b; break; case '-': result = a - b; break; case '*': result = a * b; break; case '/': result = a / b; break; default: break; } } } flag2 = 0; // 运算后,设置不可响应数字输入 } public void onConfigurationChanged(Configuration newConfig) { if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { // 横向 setContentView(R.layout.main); } else { // 竖向 setContentView(R.layout.main); } } /** * 更改键盘顺序(方法未写) */ public void changeLocation() { } /** * 更改键盘颜色 */ public void setColor(int t) { for (int i = 0; i < b.length; i ) { b[i].setBackgroundResource(t); } } /** * 设置键盘颜色(3种轮流切换) * * @param index */ public void changeColor(int index) { switch (index) { case 0: // setColor(0x9400D3);//无法设置 不知原因 break; case 1: // setColor(0x00FF00); break; case 2: // setColor(0xB4CDCD); break; default: break; } } @Override public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); SubMenu subMenu = menu.addSubMenu(1, 0, 1, "系统设置");// 主菜单 MenuItem menuItem = subMenu.add(2, 1, 1, "更换键盘背景");// 子菜单 subMenu.add(2, 2, 2, "更改键盘顺序"); menu.addSubMenu(1, 3, 2, "退出"); // 主菜单 return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { // 响应每个菜单项(通过菜单项的ID) case 0: Toast.makeText(getApplicationContext(), "您选择了系统设置", Toast.LENGTH_LONG).show(); break; case 1: Toast.makeText(getApplicationContext(), "您选择了更换键盘背景", Toast.LENGTH_LONG).show(); changeColor(index); index ; break; case 2: Toast.makeText(getApplicationContext(), "您选择了更换键盘顺序", Toast.LENGTH_LONG).show(); changeLocation(); break; case 3: Toast.makeText(getApplicationContext(), "您选择了退出", Toast.LENGTH_LONG) .show(); System.exit(0); break; default: // 对没有处理的事件,交给父类来处理 return super.onOptionsItemSelected(item); } // 返回true表示处理完菜单项的事件,不需要将该事件继续传播下去了 return true; } }
评论