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;
}
}


评论