安卓程序-计算器

部分代码还有待优化,奋斗吧,呆萌一族 ~ ~ ~

功能实现

  1. 数字的输入
    • 注意事项:
    • 小数点的输入:不能出现两个的小数点
    • 0 的输入:不能出现0000的情况
  2. 计算结果
    • 对输入内容的判空
    • 除法运算中除数不能为0

源码分析

  1. 声明变量:
     private Button apoint; //代表小数点的按钮
        private Button equal; //代表等于号的按钮
        private ToggleButton toggleButton; //用来切换向上面和向下面的文本框输入的按钮
        private Button[] b; //数字0-9的按钮
        private Button back; //撤销按钮
        private boolean isOn = true; //默认的向上面文本框输入
        private EditText edit1; //上面的文本框
        private EditText edit2; // 下面的文本框
        private ArrayAdapter<String> adapter;
        private Spinner spinner; //记录选择的符号的按钮
    
    


  2. 0的输入:如果原来的字符串转化为浮点数时是0.0,意味着继续输入0时将不能执行,否则会出现00000的情况
    private void addZero(boolean isDoubleZero) {
            if (isOn) { 
                if (!edit1.getText().toString().equals("")) {
                    if (Double.parseDouble(edit1.getText().toString()) != 0.0) {
                        if (isDoubleZero) {
                            edit1.append("00");
                        } else {
                            edit1.append("0");
                        }
                    }
                }
            } else {
                if (!edit2.getText().toString().equals("")) {
                    if (Double.parseDouble(edit2.getText().toString()) != 0.0) {
                        edit2.append("0");
                        if (isDoubleZero) {
                            edit2.append("00");
                        } else {
                            edit2.append("0");
                        }
                    }
                }
            }
        }

  3. 小数点的输入:当原来的字符串含有 "." 时,则不能继续输入
    private void addPoint() {
            Log.d("item", "addPoint");
            if (isOn) {
                if (!edit1.getText().toString().contains(".")) {
                    edit1.append(".");
                }
            } else {
                if (!edit2.getText().toString().contains(".")) {
                    edit2.append(".");
                }
            }
        }


  4. 对Spinner 的设置
    	spinner = (Spinner) findViewById(R.id.spinner);
            adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, list);
            adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
            spinner.setAdapter(adapter);
    	spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
                @Override
                public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                    select = list.get(position);
                }
    
    
                @Override
                public void onNothingSelected(AdapterView<?> parent) {
                }
            });

成品图片


全部代码

MainActivity:
package activitytest.example.com.log_calculater;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.EditText;
import android.widget.Spinner;
import android.widget.Toast;
import android.widget.ToggleButton;

import java.util.ArrayList;
import java.util.List;

import static activitytest.example.com.log_calculater.R.id.a2;

public class MainActivity extends AppCompatActivity {

    private Button apoint;
    private Button equal;
    private ToggleButton toggleButton;
    private Button[] b;
    private Button back;
    private boolean isOn = true;
    private EditText edit1;
    private EditText edit2;
    private ArrayAdapter<String> adapter;
    private Spinner spinner;
    private String select;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        final List<String> list = new ArrayList<String>();
        list.add("+");
        list.add("-");
        list.add("*");
        list.add("/");
        list.add("^");

        b = new Button[11];
        b[1] = (Button) findViewById(R.id.a1);
        b[2] = (Button) findViewById(a2);
        b[3] = (Button) findViewById(R.id.a3);
        b[4] = (Button) findViewById(R.id.a4);
        b[5] = (Button) findViewById(R.id.a5);
        b[6] = (Button) findViewById(R.id.a6);
        b[7] = (Button) findViewById(R.id.a7);
        b[8] = (Button) findViewById(R.id.a8);
        b[9] = (Button) findViewById(R.id.a9);
        b[0] = (Button) findViewById(R.id.a0);
        b[10] = (Button) findViewById(R.id.a00);
        back = (Button)findViewById(R.id.back);
        apoint = (Button) findViewById(R.id.apoint);
        equal = (Button) findViewById(R.id.equal);
        toggleButton = (ToggleButton) findViewById(R.id.toggleButton);
        spinner = (Spinner) findViewById(R.id.spinner);

        adapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, list);
        adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
        spinner.setAdapter(adapter);

        /*Add listener*/
        for (Button i : b) {
            i.setOnClickListener(new listen());
        }
        apoint.setOnClickListener(new listen());
        equal.setOnClickListener(new listen());
        back.setOnClickListener(new listen());
        edit1 = (EditText) findViewById(R.id.editText);
        edit2 = (EditText) findViewById(R.id.editText2);

        spinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
            @Override
            public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
                select = list.get(position);
            }

            @Override
            public void onNothingSelected(AdapterView<?> parent) {
            }
        });

        toggleButton.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (!toggleButton.isChecked()) {
                    isOn = true;
                } else {
                    isOn = false;
                }
            }
        });

    }

    private void addNumber(int i) {
        if (isOn) {
            edit1.append(i + "");
        } else {
            edit2.append(i + "");
        }
    }

    private void addPoint() {
        Log.d("item", "addPoint");
        if (isOn) {
            if (!edit1.getText().toString().contains(".")) {
                edit1.append(".");
            }
        } else {
            if (!edit2.getText().toString().contains(".")) {
                edit2.append(".");
            }
        }
    }

    private void addZero(boolean isDoubleZero) {
        if (isOn) {
            if (!edit1.getText().toString().equals("")) {
                if (Double.parseDouble(edit1.getText().toString()) != 0.0) {
                    if (isDoubleZero) {
                        edit1.append("00");
                    } else {
                        edit1.append("0");
                    }
                }
            }
        } else {
            if (!edit2.getText().toString().equals("")) {
                if (Double.parseDouble(edit2.getText().toString()) != 0.0) {
                    edit2.append("0");
                    if (isDoubleZero) {
                        edit2.append("00");
                    } else {
                        edit2.append("0");
                    }
                }
            }
        }
    }
    private void back(){
        if (isOn) {
            String s = edit1.getText().toString();
            if(!s.equals("")){
                edit1.setText(s.substring(0,s.length()-1));
            }
        } else {
            String s = edit2.getText().toString();
            if (!s.equals("")){
                edit2.setText(s.substring(0,s.length()-1));
            }
        }
    }

    class listen implements View.OnClickListener {

        @Override
        public void onClick(View v) {
            switch (v.getId()) {
                case R.id.a1:
                    addNumber(1);
                    Log.i("item", "1");
                    break;
                case a2:
                    addNumber(2);
                    break;
                case R.id.a3:
                    addNumber(3);
                    break;
                case R.id.a4:
                    addNumber(4);
                    break;
                case R.id.a5:
                    addNumber(5);
                    break;
                case R.id.a6:
                    addNumber(6);
                    break;
                case R.id.a7:
                    addNumber(7);
                    break;
                case R.id.a8:
                    addNumber(8);
                    break;
                case R.id.a9:
                    addNumber(9);
                    break;
                case R.id.a0:
                    addZero(false);
                    break;
                case R.id.a00:
                    addZero(true);
                    break;
                case R.id.apoint:
                    addPoint();
                    break;
                case R.id.equal:
                    calculate();
                    break;
                case R.id.back:
                    back();
                    break;

            }
        }
    }
    private void calculate() {
        String s1 = edit1.getText().toString();
        String s2 = edit2.getText().toString();
        if ((!s1.equals("")) && (!s2.equals("")) && select != null) {
            double a1 = Double.parseDouble(s1);
            double a2 = Double.parseDouble(s2);
            Toast.makeText(MainActivity.this,"计算成功",Toast.LENGTH_SHORT).show();
            if (select.equals("+")) {
                edit2.setText("");
                edit1.setText(a1 + a2 + "");
            } else if (select.equals("-")) {
                edit2.setText("");
                edit1.setText((a1 - a2) + "");
            } else if (select.equals("*")) {
                edit2.setText("");
                edit1.setText((a1 * a2) + "");
            } else if (select.equals("/")) {
                if (a2 != 0) {
                    edit2.setText("");
                    edit1.setText((a1 / a2) + "");
                }
            } else if (select.equals("^")) {
                edit2.setText("");
                for (int i = 0; i < a2; i++) {
                    a1 = a1 * a1;
                }
                edit1.setText(a1 + "");
            }
        }
    }
}
activity_main:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="activitytest.example.com.log_calculater.MainActivity">

    <Spinner
        android:id="@+id/spinner"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentStart="true"
        android:layout_below="@+id/editText"/>

    <ToggleButton
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/editText2"
        android:layout_alignParentStart="true"
        android:id="@+id/toggleButton"
        android:layout_alignParentEnd="true"
        android:textOff="上一个"
        android:textOn="下一个"/>

    <GridLayout
        android:id="@+id/gridLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:columnCount="3"
        android:rowCount="4"
        android:layout_below="@+id/toggleButton"
        android:layout_alignParentStart="true">

        <Button android:text="7"
            android:id="@+id/a7" />

        <Button android:text="8"
            android:id="@+id/a8" />

        <Button android:text="9"
            android:id="@+id/a9" />

        <Button android:text="4"
            android:id="@+id/a4" />

        <Button android:text="5"
            android:id="@+id/a5" />

        <Button android:text="6"
            android:id="@+id/a6" />

        <Button android:text="1"
            android:id="@+id/a1" />

        <Button android:text="2"
            android:id="@+id/a2" />

        <Button android:text="3"
            android:id="@+id/a3" />

        <Button android:text="0"
            android:id="@+id/a0" />

        <Button android:text="."
            android:id="@+id/apoint" />

        <Button android:text="00"
            android:id="@+id/a00" />

    </GridLayout>

    <EditText
        android:id="@+id/editText2"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:hint="0"
        android:textAlignment="center"
        android:layout_below="@+id/spinner"
        android:layout_alignParentStart="true" />

    <EditText
        android:id="@+id/editText"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_column="0"
        android:layout_row="2"
        android:hint="0"
        android:textAlignment="center"
        android:layout_alignParentTop="true"
        android:layout_alignParentStart="true" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/equal"
        android:text="="
        android:textSize="30sp"
        android:layout_below="@+id/gridLayout"
        android:layout_alignParentStart="true"
        android:layout_toStartOf="@+id/back" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/back"
        android:text="Back"
        android:layout_alignBottom="@+id/equal"
        android:layout_alignParentEnd="true" />

</RelativeLayout>



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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

呆萌的代Ma

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值