android 简易计算器、可自行扩展

来源:互联网 发布:超级玛丽乱入windows 编辑:程序博客网 时间:2024/06/10 14:43

如果你的由于项目中需要用到计算器,这个简易计算器可以让你少走一点弯路、 可自行扩展 图片效果、代码如下



activity代码:


package tt.com.calculatortest;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.TextView;
import android.widget.Toast;

import java.math.BigDecimal;
import java.text.DecimalFormat;

public class MainActivity extends AppCompatActivity {
    private TextView editText,textRelse;//输入框、计算结果
    private String opt = "";//操作符
    private String formula = "";//公式
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        editText = (TextView)findViewById(R.id.editText1);
        textRelse = (TextView)findViewById(R.id.textView1);
        textRelse.setVisibility(View.GONE);
    }
    public void btnClick(View v) {
        String edStr = editText.getText().toString();
        switch (v.getId()) {
            case R.id.button0:
                inputNumber("0");
                break;
            case R.id.button00:
                if(notBlank(editText.getText().toString()) && notBlank(formula) && !formula.equals("0")){
                    inputNumber("00");
                }else {
                    if(notBlank(textRelse.getText().toString()) && notBlank(formula) && !formula.equals("0")){
                        inputNumber("00");
                    }
                }
                break;
            case R.id.button1:
                inputNumber("1");
                break;
            case R.id.button2:
                inputNumber("2");
                break;
            case R.id.button3:
                inputNumber("3");
                break;
            case R.id.button4:
                inputNumber("4");
                break;
            case R.id.button5:
                inputNumber("5");
                break;
            case R.id.button6:
                inputNumber("6");
                break;
            case R.id.button7:
                inputNumber("7");
                break;
            case R.id.button8:
                inputNumber("8");
                break;
            case R.id.button9:
                inputNumber("9");
                break;
            case R.id.button99:
                //.小数点
                if(edStr.equals("-")){
                    break;
                }
                //判断字符串中是否已经包含了小数点,如果有就什么也不做
                if(edStr.indexOf(".") != -1) {

                } else {
                    //如果没有小数点
                    if(edStr.equals("0")){
                        //如果开始为0,
                        editText.setText(("0" + ".").toString());
                        formula = formula +".";
                    }else if(edStr.equals("")){
                        //如果初时显示为空,就什么也不做
                    }else{
                        editText.setText(edStr + ".");
                        formula = formula +".";
                    }
                    if(textRelse.getVisibility() == View.VISIBLE){
                        if(notBlank(formula) && !formula.contains(".")){
                            textRelse.setText(textRelse.getText() + ".");
                            formula = formula +".";
                        }else {

                        }
                    }else {

                    }
                }
                break;
            case R.id.button_except:
                //"/
                inputOperator("÷");
                break;
            case R.id.button_ride:
                //*
                inputOperator("×");
                break;
            case R.id.button_reduce:
                //-
                inputOperator("-");
                break;
            case R.id.button_plus:
                //+
                inputOperator("+");
                break;
            case R.id.button_c:
                //CE
                textRelse.setVisibility(View.GONE);

                formula = "";
                opt= "";
                if(edStr.length() > 0)
                    editText.setText("");
                textRelse.setText("");
                break;
            case R.id.button_cc:
                //cc
                if(notBlank(formula)){
                    formula = formula.substring(0, formula.length() - 1);
                }
                if(notBlank(opt)){
                    opt = opt.substring(0,opt.length() - 1);
                }
                if(textRelse.getVisibility() == View.VISIBLE){
                    String str =textRelse.getText().toString();
                    editText.setText("");
                    if(str.length() > 0){
                        textRelse.setText(str.substring(0, str.length() - 1));
                    }
                    if(isContains(textRelse.getText().toString())){

                    }else {

                        editText.setText(textRelse.getText().toString());
                        textRelse.setVisibility(View.GONE);
                    }
                }else {
                    String str =editText.getText().toString();
                    if(str.length() > 0){
                        editText.setText(str.substring(0, str.length() - 1));
                    }
                    if(isContains(textRelse.getText().toString())){

                    }else {

                        editText.setText(editText.getText().toString());
                        textRelse.setVisibility(View.GONE);
                        opt= "";
                    }
                }
                break;
            case R.id.button_result:
                //结果=
                if(isContains2(textRelse.getText().toString())){
                    resultStr();
                }
                break;
        }
    }

    private void inputNumber(String obj){
        if(isContains(textRelse.getText().toString())){
            opt = "";
            editText.setText("");
            String str2 = textRelse.getText().toString();
            StringBuilder sb = new StringBuilder(str2);
            if(notBlank(formula) && formula.equals("0")){
                formula = obj;
                textRelse.setText(sb.deleteCharAt(sb.length() - 1)+obj);
            }else if(notBlank(formula) && formula.equals("00")){
                formula = obj;
                textRelse.setText(sb.deleteCharAt(sb.length() - 2)+obj);
            }else {
                formula = formula+obj;
                textRelse.setText(textRelse.getText().toString()+obj);
            }

        }else {
            String str = editText.getText().toString();
            String str2 = textRelse.getText().toString();
            StringBuilder sb = new StringBuilder(str);
            StringBuilder sb2 = new StringBuilder(str2);
            if(notBlank(formula) && formula.equals("0")){
                editText.setText(sb.deleteCharAt(sb.length() - 1)+obj);
                textRelse.setText(sb2.deleteCharAt(sb2.length() - 1)+obj);
                formula = obj;

            }else if(notBlank(formula) && formula.equals("00")){
                editText.setText(sb.substring(0,sb.length()-2) + obj);
                textRelse.setText(sb2.substring(0,sb2.length()-2) +obj);
                formula = obj;

            }else {
                editText.setText(str + obj);
                textRelse.setText(textRelse.getText().toString()+obj);
                formula = formula+obj;

            }

        }
    }
    //点击运算符操作
    private void inputOperator(String operator){

        if(notBlank(formula) && formula.substring(formula.length() -1).equals(".")){
            return;
        }
        String edText2 = editText.getText().toString();
        String edText = textRelse.getText().toString();
        if(notBlank(edText2) && edText2.length() == 1 && edText2.subSequence(0, 1).equals("-")){
            return;
        }
        formula = "";
        if(notBlank(opt) && opt.length() == 1  && operator.equals("-")){
            opt= opt+operator;
        }else {
            if(opt.length() == 2){
                textRelse.setText(edText.substring(0,edText.length()-2) + operator);
                opt = operator;
                return;
            }
            opt = operator;
        }

        if(notBlank(edText) && isContains2(edText.substring(edText.length()-1))){
            editText.setText("");
            textRelse.setText(edText.substring(0,edText.length()-1) + opt);
        }else {
            if(notBlank(edText) || notBlank(edText2)){
                if(textRelse.getVisibility() == View.GONE){
                    textRelse.setText(edText2 + opt);
                }else {
                    textRelse.setText(edText + opt);
                }
                textRelse.setVisibility(View.VISIBLE);
                editText.setText("");
            }else {
                if(operator.equals("-")){
                    editText.setText(opt);
                }
                opt= "";
            }

        }
    }
    private void resultStr(){
        if(notBlank(formula) && formula.substring(formula.length() -1).equals(".")){
            return;
        }
        String edText = textRelse.getText().toString();
        if(notBlank(edText) && isContains2(edText.substring(edText.length()-1))){
            return;
        }
        formula = "";
        opt= "";
        String calcu = CalculatorIn.calcBracket(textRelse.getText().toString())+"";
        if(calcu.contains("Infinity") || calcu.contains("-Infinity") ){
            Toast.makeText(this,"被除数不能为“0”或“-0”",Toast.LENGTH_SHORT).show();
            return;
        }
        editText.setText(CalculatorIn.calcBracket(textRelse.getText().toString())+"");
        BigDecimal bg =new BigDecimal((String) editText.getText());
        if(editText.getText().toString().contains("E")){
            editText.setText(DecimalFormat2(bg)  + "");
        }else {
            editText.setText(DecimalFormat2(bg) + "");
        }
    }
    private boolean isContains(String obj){
        if(notBlank(obj) && (obj.substring(1,obj.length()).contains("+") || obj.substring(1,obj.length()).contains("-")|| obj.substring(1,obj.length()).contains("×")|| obj.substring(1,obj.length()).contains("÷"))){
            return true;
        }else {
            return false;
        }
    }
    private boolean isContains2(String obj){
        if(obj.contains("+") || obj.contains("-")|| obj.contains("×")|| obj.contains("÷")){
            return true;
        }else {
            return false;
        }
    }

    public  boolean notBlank(String str) {
        return str != null && !"".equals(str.trim())&& !str.equals("null");
    }
    //保留两位小数
    public  String DecimalFormat2(BigDecimal price) {
        DecimalFormat fnum = new DecimalFormat("##0.00");
        String dd = fnum.format(price);
        return dd;
    }

}


demo下载地址:

http://download.csdn.net/download/u014105991/10129006

demo地址




原创粉丝点击