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

不论前面计算方式是啥,我按等号后都是输出一个0

package com.example.calculatordemo;

 

import android.R.integer;

import android.app.Activity;

import android.os.Bundle;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.EditText;

import android.widget.Toast;

 

public class MainActivity extends Activity implements OnClickListener {

    Button btn_0;

    Button btn_1;

    Button btn_2;

    Button btn_3;

    Button btn_4;

    Button btn_5;

    Button btn_6;

    Button btn_7;

    Button btn_8;

    Button btn_9;

 

    Button btn_point;// 小数点

    Button btn_divide;// 除以

    Button btn_multiply;// 乘以

    Button btn_minus;// 减去

    Button btn_pluse;// 加

    Button btn_equal;// 等于

 

    Button btn_clear;

    Button btn_del;

 

    EditText et_input;

    boolean needclear;

    @Override

    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);

        setContentView(R.layout.activity_main3);

        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_divide = (Button) findViewById(R.id.btn_divide);// 除以

        btn_multiply = (Button) findViewById(R.id.btn_multiplay);// 乘以

        btn_minus = (Button) findViewById(R.id.btn_minus);// 减去

        btn_pluse = (Button) findViewById(R.id.btn_plus);// 加

        btn_equal = (Button) findViewById(R.id.btn_equle);// 等于

 

        btn_clear = (Button) findViewById(R.id.btn_clear);

        btn_del = (Button) findViewById(R.id.btn_del);

        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_divide.setOnClickListener(this);

        btn_multiply.setOnClickListener(this);

        btn_minus.setOnClickListener(this);

        btn_pluse.setOnClickListener(this);

        btn_equal.setOnClickListener(this);

 

        btn_clear.setOnClickListener(this);

        btn_del.setOnClickListener(this);

    }

 

    @Override

    public void onClick(View v) {

        // TODO Auto-generated method stub

        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(needclear&&!str.contains("+")&&!str.contains("-")&&!str.contains("×")&&!str.contains("÷")){

                str = "";

                et_input.setText("");

                needclear = false;

            }

            et_input.setText(str + ((Button) v).getText());

            break;

        case R.id.btn_plus:

        case R.id.btn_minus:

        case R.id.btn_multiplay:

        case R.id.btn_divide:

        et_input.setText(str +" "+((Button) v).getText()+" ");

            break;

        case R.id.btn_equle:

            getResult();

            break;

        case R.id.btn_del:

            if (str != null && !str.equals("")) {

                if(str.substring(str.length()-1,str.length()).equals(" ")){

                et_input.setText(str.substring(0, str.length() - 3));

                }else{

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

                }

            }

            break;

        case R.id.btn_clear:

        et_input.setText("");

            break;

        }

    }

 

    /**

     * 获取计算结果

     */

    private void getResult() {

        needclear = true;

        boolean pointT = false;

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

        double r = 0;

        if(!exp.contains(" ")||exp.substring(exp.length()-1, exp.length()).equals(" ")||exp.contains("  ")){

        et_input.setText(exp+"");

            Toast.makeText(MainActivity.this, "计算的数据有错", 2).show();

            return;

        }

        String space[] = exp.split(" "); //通过空格获取每个数据

        Double arg1 = Double.parseDouble(space[0]);//得到第一个数据,并且转化为Double类型

        if(space[0].contains(".")){

            pointT = true;

        }

        for (int i = 1;i<space.length;) {

            if(space[i+1].contains(".")){

                pointT = true;

            }

            String op = space[i];

            double arg2 = Double.parseDouble(space[i+1]);

            if(op.equals("+")){

                 r = arg1 + arg2;

            }else if(op.equals("-")){

                r = arg1 - arg2;

            }else if(op.equals("×")){

                 r = arg1 * arg2;

            }else if(op.equals("÷")){

                 if (arg2 == 0)

                 {

                    r=0;

                 }

                 else

                 {

                     r = arg1 / arg2;

                 }

            } 

            arg1=r;

            i=i+2;

        }

        if(!pointT){

            int result = (int)r;

            et_input.setText(result+"");

        }else{

        et_input.setText(r+"");

        }

    }

}

图形界面我是用表格布局做的,因为不关事吧。。

正在回答

1 回答

package com.lanou.calculator;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {
    Button btn_0 ;
    Button btn_1;
    Button btn_2;
    Button btn_3 ;
    Button btn_4 ;
    Button btn_5 ;
    Button btn_6 ;  //数字按钮
    Button btn_7 ;
    Button btn_8 ;
    Button btn_9 ;
    Button btn_point ;  //小数点按钮
    Button btn_clear ;
    Button btn_del ;
    Button btn_pluse ;
    Button btn_minus ;
    Button btn_multiply ;
    Button btn_divide ;
    Button btn_equle ;
    TextView TVresult ;
    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_pluse = (Button) findViewById(R.id.btn_add) ;
        btn_minus = (Button) findViewById(R.id.btn_sub) ;
        btn_multiply = (Button) findViewById(R.id.btn_mul) ;
        btn_divide = (Button) findViewById(R.id.btn_div) ;
        btn_equle = (Button) findViewById(R.id.btn_equal) ;
        //以上实例化按钮
        TVresult = (TextView) findViewById(R.id.TVresult);  //实例化之后的显示屏

        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_pluse.setOnClickListener(this);
        btn_minus.setOnClickListener(this);
        btn_multiply.setOnClickListener(this);
        btn_divide.setOnClickListener(this);
        btn_equle.setOnClickListener(this);
        //设置以上按钮的点击事件


    }

    @Override
    public void onClick(View v) {
        String str = TVresult.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 ="" ;
                    TVresult.setText("");
                }
                TVresult.setText(str + ((Button)v).getText());
                break ;
            case R.id.btn_add:
            case R.id.btn_sub:
            case R.id.btn_mul:
            case R.id.btn_div:
                if (clear_flag) {
                    clear_flag =false ;
                    str ="" ;
                    TVresult.setText("");
                }
               TVresult.setText(str+ " " + ((Button)v).getText()+" ");
                break;
            case R.id.btn_del:
                if (clear_flag) {
                    clear_flag =false ;
                    str ="" ;
                    TVresult.setText("");
                }else if (str!=null&&!str.equals("")){
                    TVresult.setText(str.substring(0,str.length()-1));
                }
                break;
            case R.id.btn_clear:
                clear_flag =false ;
                str ="" ;
                TVresult.setText("");
            case R.id.btn_equal:
                getResult();
                break ;

        }
    }
    /* 单独的调用运算结果
    *
    *
    * */
    private void getResult(){
        String exp = TVresult.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(".")) {
                int r = (int) result;
                TVresult.setText(r+"");
            }else {
                TVresult.setText(result+"");

            }
        }else if (!s1.equals("")&&s2.equals("")){
            TVresult.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;
                TVresult.setText(r+"");
            }else {
                TVresult.setText(result+"");
            }
        }else {
            TVresult.setText("");

        }
    }
}


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

举报

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

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

进入课程

不论前面计算方式是啥,我按等号后都是输出一个0

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