Android------Mycalculator堆栈完整版(非实现多位操作)

<span style="font-size:14px;">package com.edu.mju.mycalculater;

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

import java.text.DecimalFormat;
import java.util.Stack;

public class MainActivity extends AppCompatActivity implements View.OnClickListener {

    private TextView tv;
    /** 格式化数据 */
    private static final DecimalFormat mFormat = new DecimalFormat(
            "########.#####");
    /** 堆栈 */
    private Stack<String> mMathStack = new Stack<String>();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //绑定控件
        Button btn0 = (Button) findViewById(R.id.num0);
        Button btn1 = (Button) findViewById(R.id.num1);
        Button btn2 = (Button) findViewById(R.id.num2);
        Button btn3 = (Button) findViewById(R.id.num3);
        Button btn4 = (Button) findViewById(R.id.num4);
        Button btn5 = (Button) findViewById(R.id.num5);
        Button btn6 = (Button) findViewById(R.id.num6);
        Button btn7 = (Button) findViewById(R.id.num7);
        Button btn8 = (Button) findViewById(R.id.num8);
        Button btn9 = (Button) findViewById(R.id.num9);
        Button addbtn = (Button) findViewById(R.id.add);
        Button subbtn = (Button) findViewById(R.id.sub);
        Button divbtn = (Button) findViewById(R.id.div);
        Button mulbtn = (Button) findViewById(R.id.mul);
        Button pointbtn = (Button) findViewById(R.id.point);
        Button equalbtn = (Button) findViewById(R.id.equal);
        Button clearbtn = (Button) findViewById(R.id.clear);
        Button clear1btn = (Button) findViewById(R.id.clear1);
        tv = (TextView) findViewById(R.id.TextView);
        btn1.setOnClickListener(this);
        btn2.setOnClickListener(this);
        btn3.setOnClickListener(this);
        btn4.setOnClickListener(this);
        btn5.setOnClickListener(this);
        btn6.setOnClickListener(this);
        btn7.setOnClickListener(this);
        btn8.setOnClickListener(this);
        btn9.setOnClickListener(this);
        addbtn.setOnClickListener(this);
        subbtn.setOnClickListener(this);
        divbtn.setOnClickListener(this);
        mulbtn.setOnClickListener(this);
        pointbtn.setOnClickListener(this);
        equalbtn.setOnClickListener(this);
        clearbtn.setOnClickListener(this);
        clear1btn.setOnClickListener(this);

    }

    /** 操作数 入栈 */
    private void push(char obj) {
        final int size = mMathStack.size();
        // 清除
        if ('c' == obj) {
            mMathStack.clear();
            tv.setText("0");
            return;
        }

        // 操作符号
        if ('+' == obj || '-' == obj || '×' == obj || '÷' == obj || '=' == obj) {
            switch (size) {
                case 0:
                    break;
                case 2:
                    if ('=' != obj)
                        mMathStack.set(1, obj + "");// 同时输入两个操作符,后面的操作符替换前面的
                    break;
                case 1:
                    if ('=' != obj)
                        mMathStack.push(obj + "");
                    break;
                case 3:
                    String preResult = mFormat.format(calc());
                    mMathStack.push(preResult);
                    if ('=' != obj)
                        mMathStack.push(obj + "");
                    tv.setText(preResult);
                    break;
            }
            return;
        }

        String str = "";
        int location = 0;
        switch (size) {
            case 0:
                mMathStack.push("");
            case 1:
                str = mMathStack.peek();
                break;
            case 2:
                mMathStack.push("");
            case 3:
                location = 2;
                str = mMathStack.peek();
                break;
        }

        int len = str.length();
        if ('d' == obj) {
            // 删除
            if (len > 1)
                str = str.substring(0, len - 1);
            else if (len == 1)
                str = "0";
//        } else if ('f' == obj) {
//            if ("0".equals(str) || len == 0) {
//                return;
//            } else if (str.charAt(0) == '-') {
//                str = str.replace('-', ' ').trim();
//            } else {
//                str = '-' + str;
//            }
        } else {
            if ('.' == obj) {
                if (str.indexOf(".") > 0)
                    return;
            } else if ('0' == obj) {
                if (str.length() == 0 || str.equals("0"))
                    return;
            }
            str += obj;
        }
        if ('.' != obj)
            str = mFormat.format(parseDouble(str));
        mMathStack.set(location, str);
        tv.setText(str);
    }

    private double calc() {
        double result = 0.0D;
        if (mMathStack.size() == 3) {
            double right = parseDouble(mMathStack.pop());
            String oper = mMathStack.pop();
            double left = parseDouble(mMathStack.pop());
            if ("+".equals(oper)) {
                result = left + right;
            } else if ("-".equals(oper)) {
                result = left - right;
            } else if ("×".equals(oper)) {
                result = left * right;
            } else if ("÷".equals(oper)) {
                if (right != 0.0D)
                    result = left / right;
            }
        }
        return result;
    }

    /** 解析文本数据 */
    private double parseDouble(String str) {
        try {
            return Double.parseDouble(str);
        } catch (NumberFormatException e) {
            return 0.0D;
        }
    }

    /** 点击事件 */
    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.div:// 除
                push('÷');
                break;
            case R.id.mul:// 乘
                push('×');
                break;
            case R.id.sub:// 减
                push('-');
                break;
            case R.id.add:// 加
                push('+');
                break;
            case R.id.clear:// C
                push('c');
                break;
            case R.id.num0:
                push('0');
                break;
            case R.id.num1:
                push('1');
                break;
            case R.id.num2:
                push('2');
                break;
            case R.id.num3:
                push('3');
                break;
            case R.id.num4:
                push('4');
                break;
            case R.id.num5:
                push('5');
                break;
            case R.id.num6:
                push('6');
                break;
            case R.id.num7:
                push('7');
                break;
            case R.id.num8:
                push('8');
                break;
            case R.id.num9:
                push('9');
                break;
            case R.id.point:
                push('.');
                break;
            case R.id.equal:// =
                push('=');
                break;
//            case R.id.btnPM:// 符号,正负数
//                push('f');
//                break;
            case R.id.clear1:// <- delete
                push('d');
                break;
        }
    }

    @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);
    }
}</span>

以上是mainActivity文件代码

以下是layout布局文件

<span style="font-size:14px;color:#000000;"><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="2dp"
    android:paddingLeft="2dp"
    android:paddingRight="2dp"
    android:paddingTop="2dp"
    tools:context=".MainActivity"
    android:orientation="vertical"
    >

    <TextView
        android:singleLine="true"
        android:ellipsize="start"
        android:id="@+id/TextView"
        android:layout_width="match_parent"
        android:layout_height="120dp"
        android:text="0"
        android:textSize="60dp"
        android:gravity="right|center_vertical"

        />
    <GridLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:columnCount="4">

        <Button
            android:layout_gravity="fill"
            android:layout_marginRight="1dp"
            android:layout_marginLeft="1dp"
            android:layout_marginTop="1.2dp"
            android:layout_marginBottom="1.2dp"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:layout_height="0dp"
            android:layout_width="0dp"
            android:id="@+id/clear"
            android:text="C"
            android:textSize="30dp"
            />
        <Button
            android:layout_gravity="fill"
            android:layout_marginRight="1dp"
            android:layout_marginLeft="1dp"
            android:layout_marginTop="1.2dp"
            android:layout_marginBottom="1.2dp"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:layout_height="0dp"
            android:layout_width="0dp"
            android:id="@+id/div"
            android:text="÷"
            android:textSize="30dp"
            />
        <Button
            android:layout_gravity="fill"
            android:layout_marginRight="1dp"
            android:layout_marginLeft="1dp"
            android:layout_marginTop="1.2dp"
            android:layout_marginBottom="1.2dp"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:layout_height="0dp"
            android:layout_width="0dp"
            android:id="@+id/mul"
            android:text="×"
            android:textSize="30dp"
            />
        <Button
            android:layout_gravity="fill"
            android:layout_marginRight="1dp"
            android:layout_marginLeft="1dp"
            android:layout_marginTop="1.2dp"
            android:layout_marginBottom="1.2dp"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:layout_height="0dp"
            android:layout_width="0dp"
            android:id="@+id/sub"
            android:text="-"
            android:textSize="30dp"
            />
        <Button
            android:onClick=""
            android:layout_gravity="fill"
            android:layout_marginRight="1dp"
            android:layout_marginLeft="1dp"
            android:layout_marginTop="1.2dp"
            android:layout_marginBottom="1.2dp"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:layout_height="0dp"
            android:layout_width="0dp"
            android:id="@+id/num7"
            android:text="7"
            android:textSize="30dp"
            />
        <Button
            android:layout_gravity="fill"
            android:layout_marginRight="1dp"
            android:layout_marginLeft="1dp"
            android:layout_marginTop="1.2dp"
            android:layout_marginBottom="1.2dp"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:layout_height="0dp"
            android:layout_width="0dp"
            android:id="@+id/num8"
            android:text="8"
            android:textSize="30dp"
            />
        <Button
            android:layout_gravity="fill"
            android:layout_marginRight="1dp"
            android:layout_marginLeft="1dp"
            android:layout_marginTop="1.2dp"
            android:layout_marginBottom="1.2dp"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:layout_height="0dp"
            android:layout_width="0dp"
            android:id="@+id/num9"
            android:text="9"
            android:textSize="30dp"
            />
        <Button
            android:layout_gravity="fill"
            android:layout_marginRight="1dp"
            android:layout_marginLeft="1dp"
            android:layout_marginTop="1.2dp"
            android:layout_marginBottom="1.2dp"
            android:layout_height="0dp"
            android:layout_width="0dp"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:layout_rowSpan="2"
            android:id="@+id/add"
            android:text="+"
            android:textSize="30dp"
            />

        <Button
            android:layout_gravity="fill"
            android:layout_marginRight="1dp"
            android:layout_marginLeft="1dp"
            android:layout_marginTop="1.2dp"
            android:layout_marginBottom="1.2dp"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:layout_height="0dp"
            android:layout_width="0dp"
            android:id="@+id/num4"
            android:text="4"
            android:textSize="30dp"
            />
        <Button
            android:layout_gravity="fill"
            android:layout_marginRight="1dp"
            android:layout_marginLeft="1dp"
            android:layout_marginTop="1.2dp"
            android:layout_marginBottom="1.2dp"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:layout_height="0dp"
            android:layout_width="0dp"
            android:id="@+id/num5"
            android:text="5"
            android:textSize="30dp"
            />
        <Button
            android:layout_gravity="fill"
            android:layout_marginRight="1dp"
            android:layout_marginLeft="1dp"
            android:layout_marginTop="1.2dp"
            android:layout_marginBottom="1.2dp"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:layout_height="0dp"
            android:layout_width="0dp"
            android:id="@+id/num6"
            android:text="6"
            android:textSize="30dp"
            />
        <Button
            android:layout_gravity="fill"
            android:layout_marginRight="1dp"
            android:layout_marginLeft="1dp"
            android:layout_marginTop="1.2dp"
            android:layout_marginBottom="1.2dp"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:layout_height="0dp"
            android:layout_width="0dp"
            android:id="@+id/num1"
            android:text="1"
            android:textSize="30dp"
            />
        <Button
            android:layout_gravity="fill"
            android:layout_marginRight="1dp"
            android:layout_marginLeft="1dp"
            android:layout_marginTop="1.2dp"
            android:layout_marginBottom="1.2dp"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:layout_height="0dp"
            android:layout_width="0dp"
            android:id="@+id/num2"
            android:text="2"
            android:textSize="30dp"
            />
        <Button
            android:layout_gravity="fill"
            android:layout_marginRight="1dp"
            android:layout_marginLeft="1dp"
            android:layout_marginTop="1.2dp"
            android:layout_marginBottom="1.2dp"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:layout_height="0dp"
            android:layout_width="0dp"
            android:id="@+id/num3"
            android:text="3"
            android:textSize="30dp"
            />
        <Button
            android:layout_gravity="fill"
            android:layout_marginRight="1dp"
            android:layout_marginLeft="1dp"
            android:layout_marginTop="1.2dp"
            android:layout_marginBottom="1.2dp"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:layout_height="0dp"
            android:layout_width="0dp"
            android:id="@+id/clear1"
            android:text="←"
            android:textStyle="bold"
            android:textSize="30dp"
            />

        <Button
            android:layout_gravity="fill"
            android:layout_marginRight="1dp"
            android:layout_marginLeft="1dp"
            android:layout_marginTop="1.2dp"
            android:layout_marginBottom="1.2dp"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:layout_height="0dp"
            android:layout_width="0dp"
            android:id="@+id/num0"
            android:text="0"
            android:textSize="30dp"
            />
        <Button
            android:layout_gravity="fill"
            android:layout_marginRight="1dp"
            android:layout_marginLeft="1dp"
            android:layout_marginTop="1.2dp"
            android:layout_marginBottom="1.2dp"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:layout_height="0dp"
            android:layout_width="0dp"
            android:id="@+id/point"
            android:text="."
            android:textSize="30dp"
            />
        <Button
            android:layout_gravity="fill"
            android:layout_marginRight="1dp"
            android:layout_marginLeft="1dp"
            android:layout_marginTop="1.2dp"
            android:layout_marginBottom="1.2dp"
            android:layout_rowWeight="1"
            android:layout_columnWeight="1"
            android:layout_height="0dp"
            android:layout_width="0dp"
            android:layout_columnSpan="2"
            android:id="@+id/equal"
            android:text="="
            android:textSize="30dp"
            />
    </GridLayout>

</LinearLayout></span>


posted @ 2015-11-30 11:34  老辉辉  阅读(240)  评论(0编辑  收藏  举报