为了账号安全,请及时绑定邮箱和手机立即绑定

为什么我一按等号前面输入的内容就清空了,不知道错在哪里,请求详细回答

package com.example.q12s3.demon10;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends Activity  implements View.OnClickListener {

   Button btn_0;//0数字按钮
   Button btn_1;//1数字按钮
   Button btn_2;//2数字按钮
   Button btn_3;//3数字按钮
   Button btn_4;//4数字按钮
   Button btn_5;//5数字按钮
   Button btn_6;//6数字按钮
   Button btn_7;//7数字按钮
   Button btn_8;//8数字按钮
   Button btn_9;//9数字按钮
   Button btn_point;//小数点按钮
   Button btn_clear;//清除按钮
   Button btn_del;//删除按钮
   Button btn_plus;//加号按钮
   Button btn_minus;//减号按钮
   Button btn_multiply;//乘号按钮
   Button btn_divide;//除号按钮
   Button btn_equal;//等于按钮
   EditText et_input;//显示输入内容的显示屏
   boolean clear_flag;//清空标示;

   @Override
   protected void onCreate(Bundle savedInstanceState) {

       super.onCreate(savedInstanceState);
       setContentView(R.layout.activity_main);
       btn_0 = (Button) findViewById(R.id.btn_0);
       btn_1 = (Button) findViewById(R.id.btn_1);
       btn_2 = (Button) findViewById(R.id.btn_2);
       btn_3 = (Button) findViewById(R.id.btn_3);
       btn_4 = (Button) findViewById(R.id.btn_4);
       btn_5 = (Button) findViewById(R.id.btn_5);
       btn_6 = (Button) findViewById(R.id.btn_6);
       btn_7 = (Button) findViewById(R.id.btn_7);
       btn_8 = (Button) findViewById(R.id.btn_8);
       btn_9 = (Button) findViewById(R.id.btn_9);
       btn_point = (Button) findViewById(R.id.btn_point);
       btn_clear = (Button) findViewById(R.id.btn_clear);
       btn_del = (Button) findViewById(R.id.btn_del);
       btn_plus = (Button) findViewById(R.id.btn_plus);
       btn_minus = (Button) findViewById(R.id.btn_minus);
       btn_multiply = (Button) findViewById(R.id.btn_multiply);
       btn_divide = (Button) findViewById(R.id.btn_divide);
       btn_equal = (Button) findViewById(R.id.btn_equal);
       //以上是实例化按钮
       et_input = (EditText) findViewById(R.id.et_input);//实例化显示屏

       btn_0.setOnClickListener(this);
       btn_1.setOnClickListener(this);
       btn_2.setOnClickListener(this);
       btn_3.setOnClickListener(this);
       btn_4.setOnClickListener(this);
       btn_5.setOnClickListener(this);
       btn_6.setOnClickListener(this);
       btn_7.setOnClickListener(this);
       btn_8.setOnClickListener(this);
       btn_9.setOnClickListener(this);
       btn_point.setOnClickListener(this);
       btn_clear.setOnClickListener(this);
       btn_del.setOnClickListener(this);
       btn_plus.setOnClickListener(this);
       btn_minus.setOnClickListener(this);
       btn_multiply.setOnClickListener(this);
       btn_divide.setOnClickListener(this);
       btn_equal.setOnClickListener(this);
       //以上设置按钮的点击事件


   }

   @Override
   public void onClick(View v) {
       String str = et_input.getText().toString();
       switch (v.getId()) {
           case R.id.btn_0:
           case R.id.btn_1:
           case R.id.btn_2:
           case R.id.btn_3:
           case R.id.btn_4:
           case R.id.btn_5:
           case R.id.btn_6:
           case R.id.btn_7:
           case R.id.btn_8:
           case R.id.btn_9:
           case R.id.btn_point:
               if(clear_flag){
                   clear_flag = false;
                   str = "";
                   et_input.setText("");
               }
               et_input.setText(str + ((Button) v).getText());
               break;

           case R.id.btn_plus:
           case R.id.btn_minus:
           case R.id.btn_multiply:
           case R.id.btn_divide:
               if(clear_flag){
                   clear_flag = false;
                   str = "";
                   et_input.setText("");
               }
               et_input.setText(str + "" + ((Button) v).getText() + "");
               break;
           case R.id.btn_del:
               if(clear_flag){
                   clear_flag = false;
                   str = "";
                   et_input.setText("");
               }else if (str != null && !str.equals("")) {
                   et_input.setText(str.substring(0, str.length() - 1));
               }
               break;
           case R.id.btn_clear:
               clear_flag = false;
               str = "";
               et_input.setText("");
               break;
           case R.id.btn_equal:
               getResult();
               break;
       }
   }

   //运算结果
   private void getResult() {
       String exp = et_input.getText().toString();
       if (exp == null || exp.equals("")) {
           return;
       }
       if (!exp.contains("")) {
           return;
       }
       if(clear_flag){
           clear_flag = false;
           return;
       }
       clear_flag = true;
       double result = 0;
       String s1 = exp.substring(0, exp.indexOf(""));//运算符前面的字符串
       String op = exp.substring(exp.indexOf("") + 1, exp.indexOf("") + 2);//运算符
       String s2 = exp.substring(exp.indexOf("") + 3);//运算符后面的字符串
       if (!s1.equals("") && !s2.equals("")) {
           double d1 = Double.parseDouble(s1);
           double d2 = Double.parseDouble(s2);
           if (op.equals("+")) {
               result = d1+d2;
           } else if (op.equals("-")) {
               result = d1-d2;
           } else if (op.equals("×")) {
               result = d1*d2;
           } else if (op.equals("÷")) {
              if(d2==0){
                  result=0;
              }else{
                  result=d1/d2;
              }
           }
           if(!s1.contains(".")&&!s2.contains(".")&&!op.equals("÷")){
               int r = (int)result;
               et_input.setText(r+"");
           }else{
               et_input.setText(result+"");
           }
       }else if(!s1.equals("")&&s2.equals("")){
               et_input.setText(exp);
       }else if(s1.equals("")&&!s2.equals("")){
           double d2 = Double.parseDouble(s2);
           if (op.equals("+")) {
               result = 0+d2;
           } else if (op.equals("-")) {
               result = 0-d2;
           } else if (op.equals("×")) {
               result = 0;
           } else if (op.equals("÷")) {
                   result=0;
               }
           if(!s2.contains(".")){
               int r = (int)result;
               et_input.setText(r+"");
           }else{
               et_input.setText(result+"");
           }
           }else {
           et_input.setText("");
       }
       }
   }

正在回答

2 回答

// 我就测试了一个加号的,在我电脑运行正常,其他的没测。
//运算结果
	   private void getResult() {
	       String exp = et_input.getText().toString();
	       if (exp == null || exp.equals("")) {
	           return;
	       }
	       //这个有改动
	       if (!exp.contains(" ")) {
	           return;
	       }
	       if(clearFlag){
	           clearFlag = false;
	           return;
	       }
	       clearFlag = true;
	       double result = 0;
	       
	       //exp.indexOf("")双引号里面都打了 空格 
	       String s1 = exp.substring(0, exp.indexOf(" "));//运算符前面的字符串
	       String op = exp.substring(exp.indexOf(" ") + 1, exp.indexOf(" ") + 2);//运算符
	       
	       //这个有改动,因为我的onClick里面点击运算符的代码是 
	         //et_input.setText(str + " " + ((Button) v).getText().toString() );
	       String s2 = exp.substring(exp.indexOf(" ") + 2);//运算符后面的字符串
	       
	       if (!s1.equals("") && !s2.equals("")) {
	           double d1 = Double.parseDouble(s1);
	           double d2 = Double.parseDouble(s2);
	           
	           //这个有改动,我的是中文的加号,
	           if (op.equals("+")) {
	               result = d1+d2;
	           } else if (op.equals("-")) {
	               result = d1-d2;
	           } else if (op.equals("×")) {
	               result = d1*d2;
	           } else if (op.equals("÷")) {
	              if(d2==0){
	                  result=0;
	              }else{
	                  result=d1/d2;
	              }
	           }
	           if(!s1.contains(".")&&!s2.contains(".")&&!op.equals("÷")){
	               int r = (int)result;
	               et_input.setText(r+"");
	           }else{
	               et_input.setText(result+"");
	           }
	       }else if(!s1.equals("")&&s2.equals("")){
	               et_input.setText(exp);
	       }else if(s1.equals("")&&!s2.equals("")){
	           double d2 = Double.parseDouble(s2);
	           if (op.equals("+")) {
	               result = 0+d2;
	           } else if (op.equals("-")) {
	               result = 0-d2;
	           } else if (op.equals("×")) {
	               result = 0;
	           } else if (op.equals("÷")) {
	                   result=0;
	               }
	           if(!s2.contains(".")){
	               int r = (int)result;
	               et_input.setText(r+"");
	           }else{
	               et_input.setText(result+"");
	           }
	           }else {
	           et_input.setText("");
	       }
	       }


0 回复 有任何疑惑可以回复我~
#1

落花有意流水无情 提问者

非常感谢你怎么详细回答!
2016-05-11 回复 有任何疑惑可以回复我~

   if (!exp.contains("")) {
           return;
       }

这个你少了一个空格,要不然你输入任何内容都不包含null,就直接返回了。应该是

 if (!exp.contains(" ")) {
           return;
       }

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
Android攻城狮的第一门课(入门篇)
  • 参与学习       312585    人
  • 解答问题       4633    个

想快速掌握Android应用开发基础,选择学习这门课程就对了。

进入课程

为什么我一按等号前面输入的内容就清空了,不知道错在哪里,请求详细回答

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信