android工程计算器,Android工程师入门第一季——简易计算器。

2016年9月9日21:52:17

MainActivity

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

private Button button1;

private Button button2;

private Button button3;

private Button button4;

private Button button5;

private Button button6;

private Button button7;

private Button button8;

private Button button9;

private Button button0;

private Button buttonPoint;

private Button buttonDivide;

private Button buttonMultiply;

private Button buttonClear;

private Button buttonDelete;

private Button buttonPlus;

private Button buttonMinus;

private Button buttonEqual;

private EditText editTextInput;//显示输入内容的显示屏控件

private boolean clear_flag;//清空显示屏内容的标识

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

button0= (Button) findViewById(R.id.bt_number0);

button1= (Button) findViewById(R.id.bt_number1);

button2= (Button) findViewById(R.id.bt_number2);

button3= (Button) findViewById(R.id.bt_number3);

button4= (Button) findViewById(R.id.bt_number4);

button5= (Button) findViewById(R.id.bt_number5);

button6= (Button) findViewById(R.id.bt_number6);

button7= (Button) findViewById(R.id.bt_number7);

button8= (Button) findViewById(R.id.bt_number8);

button9= (Button) findViewById(R.id.bt_number9);

buttonPoint= (Button) findViewById(R.id.bt_point);

buttonPlus= (Button) findViewById(R.id.bt_plus);

buttonMinus= (Button) findViewById(R.id.bt_minus);

buttonDivide= (Button) findViewById(R.id.bt_divide);

buttonMultiply= (Button) findViewById(R.id.bt_multiply);

buttonClear= (Button) findViewById(R.id.bt_clear);

buttonDelete= (Button) findViewById(R.id.bt_del);

buttonEqual= (Button) findViewById(R.id.bt_equal);

editTextInput = (EditText) findViewById(R.id.editText);//实例化输入内容的显示屏

/*

给实例化的按钮添加点击事件。

*/

button0.setOnClickListener(this);

button1.setOnClickListener(this);

button2.setOnClickListener(this);

button3.setOnClickListener(this);

button4.setOnClickListener(this);

button5.setOnClickListener(this);

button6.setOnClickListener(this);

button7.setOnClickListener(this);

button8.setOnClickListener(this);

button9.setOnClickListener(this);

buttonPoint.setOnClickListener(this);

buttonPlus.setOnClickListener(this);

buttonMinus.setOnClickListener(this);

buttonMultiply.setOnClickListener(this);

buttonDivide.setOnClickListener(this);

buttonDelete.setOnClickListener(this);

buttonClear.setOnClickListener(this);

buttonEqual.setOnClickListener(this);

}

@Override

public void onClick(View view) {

/*

1>给实例的按钮进行分类,建一个String类型数据存储显示屏的内容。

2>

*/

String str = editTextInput.getText().toString();

Log.d("tag",str);

//getText() ,获取TextView的文本内容。

switch (view.getId()){

case R.id.bt_number0:

case R.id.bt_number1:

case R.id.bt_number2:

case R.id.bt_number3:

case R.id.bt_number4:

case R.id.bt_number5:

case R.id.bt_number6:

case R.id.bt_number7:

case R.id.bt_number8:

case R.id.bt_number9:

case R.id.bt_point:

if(clear_flag){

clear_flag=false;

str="";

// editTextInput.setText("");

Log.d("tag","清空标识符clear_flag为true,清空内容");

}

editTextInput.setText(str+((Button)view).getText());

// ( (Button) )view).getText() ; 获取Button中的text 内容

break;

// 以上的按钮全部为输入类型的不具备功能的显示在显示屏上的按钮。

case R.id.bt_divide:

case R.id.bt_multiply:

case R.id.bt_plus:

case R.id.bt_minus:

if(clear_flag){

clear_flag=false;

str="";

// editTextInput.setText("");

Log.d("tag","清空标识符clear_flag为true,清空内容");

}

editTextInput.setText(str+" "+((Button)view).getText()+" ");

// 为了方便逻辑编写,区别于数字按钮,添加“”空字符串。

break;

//以上按钮为输入类型是具备功能的按钮

case R.id.bt_del:

if(clear_flag){

clear_flag=false;

str="";

// editTextInput.setText("");

Log.d("tag","清空标识符clear_flag为true,清空内容");

}

else if (!Objects.equals(str, "")){

Log.d("tag","del按键被点击并生效,字符串减一");

editTextInput.setText(str.substring(0,str.length()-1));

//判断显示屏中的内容是不是为空,如果不为空,使用字符串类型的 substring(int beginIndex,endIndex-1)方法进行减一字符串.

}

break;

case R.id.bt_clear:

//清楚按钮,直接设置显示屏内容为“”空字符串即可。

clear_flag =false;

editTextInput.setText("");

break;

case R.id.bt_equal:

//单独写一个方法, 来进行运算最后的结果。

getResult();

clear_flag =true;

Log.d("tag","equal按钮被点击了。");

break;

}

}

private void getResult(){

//创建一个exp字符串来读取显示屏中的内容。

String exp = editTextInput.getText().toString();

double result = 0;

Log.d("tag","创建一个exp字符串来读取显示屏中的内容,成功!");

/*

运算逻辑方式:

1、判断显示屏的内容是不是空的,如果是空的,点击了“=”后给它直接返回值。

2、判断显示屏中有没有使用到运算符按钮的特征“”空字符串,如果没有,直接返回值。

3、给显示屏上的字符串进行分类,并存储到String类型的变量中。

4、判断字符串中运算符前后的内容是不是为空,若不为空,则开始进行运算。

4.1、判断显示屏上字符串的运算有没有小数点,以及输出结果是否需要修改为int类型。

5、如果运算符前的内容不为空,而运算符后的内容为空,则返回0并警告。

6、运算符前后的内容都为空,则清空显示屏信息。

7、当运算出结果后, 再次点击按钮,则要在之前清空所有的数据。

*/

if (Objects.equals(exp, "")){

Log.d("tag","1、判断显示屏的内容是不是空的,如果是空的,点击了“=”后给它直接返回值。");

return;

}

if (!exp.contains(" ")) {

// exp.contains()方法,匹配获取字符串中内容的关键字

Log.d("tag","判断显示屏中有没有使用到运算符按钮的特征“”空字符串,如果没有,直接返回值。");

return;

}

String s1 = exp.substring(0,exp.indexOf(" "));// 运算符前面的字符串,substring方法时获取两个索引位置之间的字符串

String op = exp.substring(exp.indexOf(" ")+1,exp.indexOf(" ")+2);//获取运算符内容。

String s2 = exp.substring(exp.indexOf(" ")+3);//获取运算符后面的内容。

Log.d("tag","分别为运算符前字符串、运算符、运算符后字符串:"+s1+": "+op+": "+s2);

//程序崩溃的,数字加小数点加数字的原因。

if (s1.contains(".")s2.contains(".")) {

String pointTest1 = s1.substring(s1.indexOf("."));

String pointTest2 = s2.substring(s1.indexOf("."));

if (s1.contains("..") s2.contains("..") pointTest1.contains(".") pointTest2.contains(".")) {

Log.d("tag", "运算错误,出现多个小数点");

Toast.makeText(MainActivity.this, "你眼瞎了,小数点按多了啊!", Toast.LENGTH_SHORT).show();

return;

}

}

//程序崩溃了,出现多个运算符,溢出逻辑之外。

/*

这个问题,可以考虑下建立一个加减乘除的运算符的类,然后通过对类的特征来区别数字与运算符。

*/

if (s2.contains(" ")){

Log.d("tag","运算错误,出现多个运算符");

Toast.makeText(MainActivity.this, "太复杂了我算不出!", Toast.LENGTH_SHORT).show();

return;

}

// 开始较为合理的运算。

if (!s1.equals("")&&!s2.equals("")){

Log.d("tag","开始对数字进行运算。");

double d1 = Double.parseDouble(s1);

double d2 = Double.parseDouble(s2);

switch (op) {

case "+":

result = d1 + d2;

Log.d("tag", "加法运算成功" + result);

break;

case "-":

result = d1 - d2;

Log.d("tag", "减法运算成功" + result);

break;

case "×":

result = d1 * d2;

Log.d("tag", "乘法运算成功" + result);

break;

case "÷":

//对除法进行判断,被除数不能等于0。

if (d2 == 0) {

result = 0.0;

Log.d("tag", "除法运算失败" + result);

Toast.makeText(MainActivity.this, "被除数不能为零!", Toast.LENGTH_SHORT).show();

} else {

result = d1 / d2;

Log.d("tag", "除法运算成功" + result);

}

break;

}

if (!s1.contains(".")&&!s2.contains(".")){

//判断需要输出整数还是小数。

int r = (int)result;

editTextInput.setText(r+"");

Log.d("tag","输出整数"+result);

}else {

editTextInput.setText(result+"");

Log.d("tag","输出小数"+result);

}

}

else if (!s1.equals("")&&s2.equals("")){

editTextInput.setText(exp);

Toast.makeText(MainActivity.this, "请输入完整的算式!", Toast.LENGTH_SHORT).show();

Log.d("tag","运算符后的字符串为空。"+result);

}

else if (s1.equals("")&&!s2.equals("")){

double d2 = Double.parseDouble(s2);

switch (op) {

case "+":

result = d2;

Log.d("tag", "加法运算成功" + result);

break;

case "-":

result = 0 - d2;

Log.d("tag", "减法运算成功" + result);

break;

case "×":

result = 0;

Log.d("tag", "乘法运算成功" + result);

break;

case "÷":

//对除法进行判断,被除数不能等于0。

if (d2 == 0) {

result = 0.0;

Log.d("tag", "除法运算失败" + result);

Toast.makeText(MainActivity.this, "被除数不能为零!", Toast.LENGTH_SHORT).show();

} else {

result = 0;

Log.d("tag", "除法运算成功" + result);

}

break;

}

}else if (s1.equals("")&&s2.equals("")){

editTextInput.setText("");

}

editTextInput.setText(result+"");

}

}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值