zoukankan      html  css  js  c++  java
  • Android 计算器制作 2.注册View 构建函数

    鄙人新手 整了 快两天 终于搞定了。。

    1.首先是MainActivity 中 在Oncreate函数中 注册

    2.按+ 或者 - 号 来分成两大字符串 s1 和 s2 

      再将s2 分为更小的s1 和 s2 直到 s2不包含+ 或者 -号 

    思路就是这样,没用递归,递归速度太慢,也不擅长用递归。

    3.就是找各种Bug 还有装饰

    基本达成目标 和自己手机上安卓的自带计算器基本一样。

    改正 双击等于 死机

    改正 除数可以为0

    改正 不能多个运算符

    ...未知

    项目代码如下:

    链接: http://pan.baidu.com/s/1c0dj748 密码: hkyx

    写法如下package com.example.administrator.myapplication;

    
    import android.app.Activity;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.util.Log;
    import android.view.Menu;
    import android.view.MenuItem;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    import android.widget.EditText;
    
    public class MainActivity extends Activity implements OnClickListener {
        private Button bt_0;
        private Button bt_1;
        private Button bt_2;
        private Button bt_3;
        private Button bt_4;
        private Button bt_5;
        private Button bt_6;
        private Button bt_7;
        private Button bt_8;
        private Button bt_9;
        private Button bt_point;
    
        private Button bt_C;
        private Button bt_DEL;
        private Button bt_minuse;
        private Button bt_multipy;
        private Button bt_plus;
        private Button bt_divide;
        private Button bt_dengyu;
    
        private EditText input_text;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
    //        注册Button
            bt_0 = (Button) findViewById(R.id.bt_0);
            bt_1 = (Button) findViewById(R.id.bt_1);
            bt_2 = (Button) findViewById(R.id.bt_2);
            bt_3 = (Button) findViewById(R.id.bt_3);
            bt_4 = (Button) findViewById(R.id.bt_4);
            bt_5 = (Button) findViewById(R.id.bt_5);
            bt_6 = (Button) findViewById(R.id.bt_6);
            bt_7 = (Button) findViewById(R.id.bt_7);
            bt_8 = (Button) findViewById(R.id.bt_8);
            bt_9 = (Button) findViewById(R.id.bt_9);
            bt_point = (Button) findViewById(R.id.bt_point);
    
            bt_C = (Button) findViewById(R.id.bt_clear);
            bt_DEL = (Button) findViewById(R.id.bt_del);
            bt_minuse = (Button) findViewById(R.id.bt_minuse);
            bt_multipy = (Button) findViewById(R.id.bt_multipy);
            bt_plus = (Button) findViewById(R.id.bt_plus);
            bt_divide = (Button) findViewById(R.id.bt_divide);
            bt_dengyu = (Button) findViewById(R.id.bt_dengyu);
    
            input_text = (EditText) findViewById(R.id.edit_text1);
    
    //      监听事件
            bt_0.setOnClickListener(this);
            bt_1.setOnClickListener(this);
            bt_2.setOnClickListener(this);
            bt_3.setOnClickListener(this);
            bt_4.setOnClickListener(this);
            bt_5.setOnClickListener(this);
            bt_6.setOnClickListener(this);
            bt_7.setOnClickListener(this);
            bt_8.setOnClickListener(this);
            bt_9.setOnClickListener(this);
            bt_point.setOnClickListener(this);
    
            bt_C.setOnClickListener(this);
            bt_DEL.setOnClickListener(this);
            bt_minuse.setOnClickListener(this);
            bt_multipy.setOnClickListener(this);
            bt_plus.setOnClickListener(this);
            bt_divide.setOnClickListener(this);
            bt_dengyu.setOnClickListener(this);
    
        }
    
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            // Inflate the menu; this adds items to the action bar if it is present.
            getMenuInflater().inflate(R.menu.menu_main, menu);
            return true;
        }
    
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            // Handle action bar item clicks here. The action bar will
            // automatically handle clicks on the Home/Up button, so long
            // as you specify a parent activity in AndroidManifest.xml.
            int id = item.getItemId();
    
            //noinspection SimplifiableIfStatement
            if (id == R.id.action_settings) {
                return true;
            }
    
            return super.onOptionsItemSelected(item);
        }
    
        @Override
        public void onClick(View v) {
            String str = input_text.getText().toString();
            switch (v.getId()) {
                case R.id.bt_0:
                case R.id.bt_1:
                case R.id.bt_2:
                case R.id.bt_3:
                case R.id.bt_4:
                case R.id.bt_5:
                case R.id.bt_6:
                case R.id.bt_7:
                case R.id.bt_8:
                case R.id.bt_9:
                    input_text.setText(str + ((Button) v).getText());
                    break;
                case R.id.bt_point:
                    if (!str.contains(".")) input_text.setText(str + ((Button) v).getText());
                    break;
                case R.id.bt_plus:
                case R.id.bt_minuse:
                case R.id.bt_multipy:
                case R.id.bt_divide:
                    if(str.equals(""));
                    else {
                        char a =str.charAt(str.length()-1);
                        Log.i("str",str+"");
                        Log.i("最后一位字符",a+"");
                        if( a ==' ' );
                        else {
                            input_text.setText(str + " " + ((Button) v).getText() + " ");
                        }
                        a =str.charAt(str.length()-1);
                        break;
                    }
                    break;
    
    
                case R.id.bt_clear:
                    input_text.setText(null);
                    break;
                case R.id.bt_del:
                    if (str != null && !str.equals("")) {
                        input_text.setText(str.substring(0, str.length() - 1));
                    }
                    break;
                case R.id.bt_dengyu:
                    getRseult();
                    break;
    
            }
        }
    
        //运算结果
        private void getRseult() {
            String str = input_text.getText().toString();
            if (str == null || str.equals(""))
                return;
            if(!str.contains("+") &&!str.contains("-")&&!str.contains("×")&&!str.contains("÷") )
                return;
            //遍历计算result
            double result = 0;
            char a =str.charAt(str.length()-2);
            if(a == '+' || a == '-'){
                str = str + '0';
            }
            else if(a == '×' || a == '÷'){
                str = str + '1';
            }
    
            int i = 0;
            int start = 0;
            char temp =' ';
    
            int flag = 1;
    
    
            if(!str.contains("+") &&!str.contains("-")){
                result += calculate_include_multy_or_minuse(str);
            }
            else {
                for (; i < str.length(); i++) {
                    char c = str.charAt(i);
    
                    if (c == '+' || c == '-') {
                        String s1 = str.substring(start, i);
                        Log.i("S1是", s1 + "");
                        if(flag == 0) result -= calculate_include_multy_or_minuse(s1);
                        else result += calculate_include_multy_or_minuse(s1);
    
                        start = i + 1;
    
                        if(c == '-') flag = 0;
                        else flag = 1;
                        String s2 = str.substring(start, str.length());
                        Log.i("S2是", s2 + "");
    
                        if (s2.contains("+") || s2.contains("-")) {
                            temp = c;
                            continue;
                        }
                        else {
                            if(flag == 0) {
                                result -= calculate_include_multy_or_minuse(s2);
                            }
                            else result += calculate_include_multy_or_minuse(s2);
    
                        }
                    }
                }
            }
            int r = 0;
           String result_string = Double.toString(result);
        if(Double.toString(result) == "Infinity") input_text.setText("傻啊?除数为0"); else if ((int)result == result){ r = (int)result; input_text.setText(r + ""); } else input_text.setText(result + ""); } private double calculate(String s) { double sum = 1; int start = 0; int flag = 0; int flag2 = 0; s = s + '×'; char op = ' '; for (int i = 0; i < s.length(); i++) { char c = s.charAt(i); if (c == '×' || c == '÷') { if (flag2 == 0) op = c; String s1 = s.substring(start, i); if (flag == 0) { sum *= Double.parseDouble(s1); // Log.i("第一个是"," "+sum); flag = 1; flag2 = 1; } else { switch (op) { case '×': // Log.i("s1是"," "+s1); sum = sum * Double.parseDouble(s1); // Log.i("sum是"," "+sum); break; case '÷': // Log.i("s2是"," "+s1); sum = sum / Double.parseDouble(s1); // Log.i("sum是"," "+sum); break; } } op = c; start = i + 1; } } // Log.i("sum的结果是", " " + sum); return sum; } private double calculate_include_multy_or_minuse(String s) { double sum = 0; if (s.contains("×") || s.contains("÷")) { sum = calculate(s); } else { sum = Double.parseDouble(s); } return sum; } }

      

      

  • 相关阅读:
    Java8 新的日期和时间API(笔记)
    java对象的强引用,软引用,弱引用和虚引用
    对性能有何帮助(读书笔记)
    ThreadLocal的实现原理(读书笔记)
    ThreadLocal的简单使用(读书笔记)
    编程、滑板与做饭
    在三四线城市谈软件业务,及其他
    EOS开发中内存RAM如何买卖
    用Visual Studio和c#开发以太坊dapp
    使用PHP和树莓派开发一个比特币和以太坊交易机器人
  • 原文地址:https://www.cnblogs.com/zmaibbs7/p/4820583.html
Copyright © 2011-2022 走看看