Android Studio实现带三角函数对数运算功能的高级计算器

用AndroidStudio编写高级计算器带三角函数对数运算功能

界面效果图:

layout布局 activity_jisuanqi.xml代码:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical"
    android:padding="5dp" >

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_weight="2"
        android:orientation="vertical" >

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="100dp"
            android:layout_weight="1"

            android:orientation="vertical"
            android:paddingBottom="5dp" >

            <TextView
                android:id="@+id/text0"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:layout_weight="1.2"

                android:gravity="right"
                android:scrollHorizontally="true"
                android:textColor="#ff000000"
                android:textSize="25sp" />

            <TextView
                android:id="@+id/text1"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:layout_weight="1"

                android:gravity="right"
                android:scrollHorizontally="true"
                android:text="0"
                android:textColor="#ff000000"
                android:textSize="30sp" />
        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="21dp"
            android:layout_weight="1"
            android:orientation="vertical" >
        </LinearLayout>

    </LinearLayout>

    <LinearLayout
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_weight="1"
        android:orientation="vertical">

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:orientation="horizontal">

            <Button
                android:id="@+id/factorial"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:layout_weight="1"
                android:text="!" />

            <Button
                android:id="@+id/power"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:layout_weight="1"
                android:text="^" />

            <Button
                android:id="@+id/square_root"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:layout_weight="1"
                android:text="√" />

            <Button
                android:id="@+id/pai"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:layout_weight="1"
                android:textAllCaps="false"
                android:text="π" />

            <Button
                android:id="@+id/c"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:layout_weight="1"
                android:textAllCaps="false"
                android:text="C"
                android:textColor="#ffff0000" />
        </LinearLayout>

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:orientation="horizontal">

            <Button
                android:id="@+id/sin"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:layout_weight="1"
                android:textAllCaps="false"
                android:text="sin" />

            <Button
                android:id="@+id/brackets1"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:layout_weight="1"
                android:text="(" />

            <Button
                android:id="@+id/brackets2"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:layout_weight="1"
                android:text=")" />

            <Button
                android:id="@+id/e"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:layout_weight="1"
                android:textAllCaps="false"
                android:text="e" />

            <Button
                android:id="@+id/del"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:layout_weight="1"
                android:text="DEL" />
        </LinearLayout>

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:orientation="horizontal">

            <Button
                android:id="@+id/cos"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:layout_weight="1"
                android:textAllCaps="false"
                android:text="cos" />

            <Button
                android:id="@+id/seven"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:layout_weight="1"
                android:text="7" />

            <Button
                android:id="@+id/eight"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:layout_weight="1"
                android:text="8" />

            <Button
                android:id="@+id/nine"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:layout_weight="1"
                android:text="9" />

            <Button
                android:id="@+id/division"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:layout_weight="1"
                android:text="÷" />
        </LinearLayout>

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:orientation="horizontal">

            <Button
                android:id="@+id/tan"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:layout_weight="1"
                android:textAllCaps="false"
                android:text="tan" />

            <Button
                android:id="@+id/four"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:layout_weight="1"
                android:text="4" />

            <Button
                android:id="@+id/five"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:layout_weight="1"
                android:text="5" />

            <Button
                android:id="@+id/six"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:layout_weight="1"
                android:text="6" />

            <Button
                android:id="@+id/multiple"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:layout_weight="1"
                android:text="×" />
        </LinearLayout>

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:orientation="horizontal">

            <Button
                android:id="@+id/ln"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:layout_weight="1"
                android:textAllCaps="false"
                android:text="ln" />

            <Button
                android:id="@+id/one"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:layout_weight="1"
                android:text="1" />

            <Button
                android:id="@+id/two"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:layout_weight="1"
                android:text="2" />

            <Button
                android:id="@+id/three"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:layout_weight="1"
                android:text="3" />

            <Button
                android:id="@+id/subtract"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:layout_weight="1"
                android:text="-" />
        </LinearLayout>

        <LinearLayout
            android:layout_width="fill_parent"
            android:layout_height="fill_parent"
            android:layout_weight="1"
            android:orientation="horizontal">

            <Button
                android:id="@+id/log"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:layout_weight="1"
                android:textAllCaps="false"
                android:text="log" />

            <Button
                android:id="@+id/zero"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:layout_weight="1"
                android:text="0" />

            <Button
                android:id="@+id/point"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:layout_weight="1"
                android:text="." />

            <Button
                android:id="@+id/add"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:layout_weight="1"
                android:text="+" />

            <Button
                android:id="@+id/eq"
                android:layout_width="fill_parent"
                android:layout_height="fill_parent"
                android:layout_weight="1"
                android:text="=" />
        </LinearLayout>
    </LinearLayout>

</LinearLayout>

java类JisuanqiActivity代码:

package com.xueba.jsq;

import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import android.view.MenuItem.OnMenuItemClickListener;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class JisuanqiActivity extends Activity implements OnClickListener {
    /** Called when the activity is first created. */
    private String string = "0";
    private Button btn1, btn2, btn3, btn4, btn5, btn6, btn7, btn8, btn9, btn0;
    private Button btnadd, btnsub, btnmul, btndiv, btnsin, btncos, btntan;
    private Button btnln, btnlog, btne, btneq, btnpoint, btndel, btnpower;
    private Button btnsq, btnpai, btnc, btnb1, btnb2, btnfa;
    private TextView btnt0, btnt1;
    private boolean flag = false;
    private GetValue getValue = new GetValue();
    private Judge judge = new Judge();

    private void init() {
        btn1 = (Button) this.findViewById(R.id.one);
        btn2 = (Button) this.findViewById(R.id.two);
        btn3 = (Button) this.findViewById(R.id.three);
        btn4 = (Button) this.findViewById(R.id.four);
        btn5 = (Button) this.findViewById(R.id.five);
        btn6 = (Button) this.findViewById(R.id.six);
        btn7 = (Button) this.findViewById(R.id.seven);
        btn8 = (Button) this.findViewById(R.id.eight);
        btn9 = (Button) this.findViewById(R.id.nine);
        btn0 = (Button) this.findViewById(R.id.zero);
        btnadd = (Button) this.findViewById(R.id.add);
        btnsub = (Button) this.findViewById(R.id.subtract);
        btnmul = (Button) this.findViewById(R.id.multiple);
        btndiv = (Button) this.findViewById(R.id.division);
        btnsin = (Button) this.findViewById(R.id.sin);
        btncos = (Button) this.findViewById(R.id.cos);
        btntan = (Button) this.findViewById(R.id.tan);
        btnln = (Button) this.findViewById(R.id.ln);
        btnlog = (Button) this.findViewById(R.id.log);
        btne = (Button) this.findViewById(R.id.e);
        btneq = (Button) this.findViewById(R.id.eq);
        btnpoint = (Button) this.findViewById(R.id.point);
        btndel = (Button) this.findViewById(R.id.del);
        btnpower = (Button) this.findViewById(R.id.power);
        btnfa = (Button) this.findViewById(R.id.factorial);
        btnsq = (Button) this.findViewById(R.id.square_root);
        btnpai = (Button) this.findViewById(R.id.pai);
        btnc = (Button) this.findViewById(R.id.c);
        btnb1 = (Button) this.findViewById(R.id.brackets1);
        btnb2 = (Button) this.findViewById(R.id.brackets2);
        btnt0 = (TextView) this.findViewById(R.id.text0);
        btnt1 = (TextView) this.findViewById(R.id.text1);

        this.btn0.setOnClickListener(this);
        this.btn1.setOnClickListener(this);
        this.btn2.setOnClickListener(this);
        this.btn3.setOnClickListener(this);
        this.btn4.setOnClickListener(this);
        this.btn5.setOnClickListener(this);
        this.btn6.setOnClickListener(this);
        this.btn7.setOnClickListener(this);
        this.btn8.setOnClickListener(this);
        this.btn9.setOnClickListener(this);
        this.btnadd.setOnClickListener(this);
        this.btnb1.setOnClickListener(this);
        this.btnb2.setOnClickListener(this);
        this.btnc.setOnClickListener(this);
        this.btncos.setOnClickListener(this);
        this.btndel.setOnClickListener(this);
        this.btndiv.setOnClickListener(this);
        this.btne.setOnClickListener(this);
        this.btneq.setOnClickListener(this);
        this.btnfa.setOnClickListener(this);
        this.btnln.setOnClickListener(this);
        this.btnlog.setOnClickListener(this);
        this.btnmul.setOnClickListener(this);
        this.btnpai.setOnClickListener(this);
        this.btnpoint.setOnClickListener(this);
        this.btnpower.setOnClickListener(this);
        this.btnsin.setOnClickListener(this);
        this.btnsq.setOnClickListener(this);
        this.btnsub.setOnClickListener(this);
        this.btntan.setOnClickListener(this);
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_jisuanqi);
        this.init();
    }

    public boolean onCreateOptionsMenu(Menu menu) {
        MenuItem exit = menu.add("EXIT");
        exit.setOnMenuItemClickListener(new OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {
                finish();
                return true;
            }
        });
        return true;
    }

    @Override
    public void onClick(View v) {

        if ("error".equals(btnt1.getText().toString())
                || "∞".equals(btnt1.getText().toString())) {
            string = "0";
        }

        if (v == this.btn0) {
            string = judge.digit_judge(string, "0", flag);
            flag = false;
            btnt1.setText(string);
        } else if (v == this.btn1) {
            string = judge.digit_judge(string, "1", flag);
            flag = false;
            btnt1.setText(string);
        } else if (v == this.btn2) {
            string = judge.digit_judge(string, "2", flag);
            flag = false;
            btnt1.setText(string);
        } else if (v == this.btn3) {
            string = judge.digit_judge(string, "3", flag);
            flag = false;
            btnt1.setText(string);
        } else if (v == this.btn4) {
            string = judge.digit_judge(string, "4", flag);
            flag = false;
            btnt1.setText(string);
        } else if (v == this.btn5) {
            string = judge.digit_judge(string, "5", flag);
            flag = false;
            btnt1.setText(string);
        } else if (v == this.btn6) {
            string = judge.digit_judge(string, "6", flag);
            flag = false;
            btnt1.setText(string);
        } else if (v == this.btn7) {
            string = judge.digit_judge(string, "7", flag);
            flag = false;
            btnt1.setText(string);
        } else if (v == this.btn8) {
            string = judge.digit_judge(string, "8", flag);
            flag = false;
            btnt1.setText(string);
        } else if (v == this.btn9) {
            string = judge.digit_judge(string, "9", flag);
            flag = false;
            btnt1.setText(string);
        } else if (v == this.btneq) {
            btnt0.setText(string + "=");
            string = getValue.advanced_dispose(string);
            string = judge.digit_dispose(string);
            flag = true;
            btnt1.setText(string);
        } else if (v == this.btnadd) {
            string = judge.judge(string, "+");
            flag = false;
            btnt1.setText(string);
        } else if (v == this.btnsub) {
            string = judge.judge(string, "-");
            flag = false;
            btnt1.setText(string);
        } else if (v == this.btnmul) {
            string = judge.judge(string, "×");
            flag = false;
            btnt1.setText(string);
        } else if (v == this.btndiv) {
            string = judge.judge(string, "÷");
            flag = false;
            btnt1.setText(string);
        } else if (v == this.btnb1) {
            if ("0".equals(string) || flag) {
                string = "(";
            } else
                string += "(";
            flag = false;
            btnt1.setText(string);
        } else if (v == this.btnb2) {
            if ("0".equals(string) || flag) {
                string = ")";
            } else
                string += ")";
            flag = false;
            btnt1.setText(string);
        } else if (v == this.btne) {
            if ("0".equals(string)) {
                string = "e";
            } else
                string += "e";
            flag = false;
            btnt1.setText(string);
        } else if (v == this.btnpower) {
            string += "^";
            flag = false;
            btnt1.setText(string);
        } else if (v == this.btnfa) {
            string += "!";
            flag = false;
            btnt1.setText(string);
        } else if (v == this.btnsq) {
            if ("0".equals(string) || flag)
                string = "";
            string += "√";
            flag = false;
            btnt1.setText(string);
        } else if (v == this.btnpai) {
            if ("0".equals(string) || flag) {
                string = "π";
            } else
                string += "π";
            flag = false;
            btnt1.setText(string);
        } else if (v == this.btnsin) {
            if ("0".equals(string) || flag) {
                string = "sin(";
            } else
                string += "sin(";
            flag = false;
            btnt1.setText(string);
        } else if (v == this.btncos) {
            if ("0".equals(string) || flag) {
                string = "cos(";
            } else
                string += "cos(";
            flag = false;
            btnt1.setText(string);
        } else if (v == this.btntan) {
            if ("0".equals(string) || flag) {
                string = "tan(";
            } else
                string += "tan(";
            flag = false;
            btnt1.setText(string);
        } else if (v == this.btnln) {
            if ("0".equals(string) || flag) {
                string = "ln(";
            } else
                string += "ln(";
            flag = false;
            btnt1.setText(string);
        } else if (v == this.btnpoint) {
            string = judge.judge1(string);
            flag = false;
            btnt1.setText(string);
        } else if (v == this.btnlog) {
            if ("0".equals(string) || flag) {
                string = "log(";
            } else
                string += "log(";
            flag = false;
            btnt1.setText(string);
        } else if (v == this.btndel) {
            if (flag) {
                string = "";
                btnt0.setText(string);
                string = "0";
                btnt1.setText(string);
            }

            if (!"0".equals(string)) {
                string = string.substring(0, string.length() - 1);
                if (0 == string.length())
                    string = "0";
            }
            flag = false;
            btnt1.setText(string);
        } else if (v == this.btnc) {
            string = "";
            btnt0.setText(string);
            string = "0";
            btnt1.setText(string);
            flag = false;
        }
    }
}

java类GetValue代码:

package com.xueba.jsq;

import java.util.LinkedList;
import java.util.List;

public class GetValue {

    public String bracke_dispose(String string) {
        // 处理括号里的表达式,思路,
        // 1.遇到正括号就将它在字符串里的索引保存在一个链表里<插在链表头>
        // 2.遇到第一个反括号就处理这个括号里的表达式<取出链表第一个元素,然后根据这两个索引取出表达式,会调用一个专门处理
        // log,ln,sin,cos,tan等的special_dispose函数,将反回一个自由加减乘除的表达式,在调用alg_dispose函数>
        // 3.函数处理后返回一个可能还含有log,ln,sin,cos,tan等的但没有括号的表达式;

        int flag = 0, flag1 = 0, i = 0;
        int leng = string.length();
        List<Integer> list = new LinkedList<Integer>();
        Character c;
        String str = "", tmp = "", tmp3 = "", tmp4 = "";

        while (true) {
            if (i >= leng)
                break;

            c = string.charAt(i);

            if ('(' == c)
                list.add(0, i);

            if (')' == c) {
                if (0 == list.size()) {
                    System.out.println(")error");
                    return "error";
                }

                str = string.substring(list.get(0) + 1, i);
                tmp = this.special_dispose(str);
                tmp = this.alg_dispose(str);
                if ("error".equals(tmp))
                    return "error";

                tmp3 = string.substring(0, list.get(0));
                tmp4 = string.substring(i + 1, leng);
                string = tmp3 + tmp + tmp4;

                flag = str.length() + 2;
                flag1 = tmp.length();
                leng += (flag1 - flag);
                i += (flag1 - flag);
                list.remove(0);
            }
            i++;
        }

        if (list.size() != 0) {
            System.out.println("(error");
            return "error";
        }
        return string;
    }

    public String special_dispose(String string) {
        // 用于处理特殊表达式;

        if ("error".equals(string)) {
            return "error";
        }
        string = dispose(string, "sin");
        string = dispose(string, "cos");
        string = dispose(string, "tan");
        string = dispose(string, "log");
        string = dispose(string, "ln");
        string = dispose(string, "!");
        string = dispose(string, "^");
        string = dispose(string, "√");
        string = dispose(string, "e");
        return string;
    }

    public String alg_dispose(String string) {
        // 处理加减乘除
        string = special_dispose(string);

        if ("error".equals(string)) {
            return "error";
        }

        Character c;
        String str = "";
        List<Double> list = new LinkedList<Double>();
        double tmp = 0;
        boolean add_flag = false;

        for (int i = 0; i < string.length(); i++) {
            c = string.charAt(i);
            if (!Judge.paiduan(c)) {
                str += c;
            } else {
                if (str.length() != 0)
                    list.add(new Double(str));

                str = "";
                switch (c) {
                    case '+':
                        if (2 == list.size()) {
                            if (add_flag) {
                                tmp = list.get(0) + list.get(1);
                                list.clear();
                                list.add(tmp);
                            } else {
                                tmp = list.get(0) - list.get(1);
                                list.clear();
                                list.add(tmp);
                            }
                            break;
                        }
                        add_flag = true;
                        break;
                    case '-':
                        if (2 == list.size()) {
                            if (add_flag) {
                                tmp = list.get(0) + list.get(1);
                                list.clear();
                                list.add(tmp);
                            } else {
                                tmp = list.get(0) - list.get(1);
                                list.clear();
                                list.add(tmp);
                            }
                            add_flag = false;
                            break;
                        }
                        break;
                    case '×':
                        if (i == (string.length() - 1))
                            return "error";
                        while (!(i == (string.length() - 1))
                                && !Judge.paiduan((c = string.charAt(i + 1)))) {
                            str += c;
                            i++;
                        }

                        if (str.length() != 0)
                            list.add(new Double(str));
                        str = "";

                        if (list.size() == 2) {
                            tmp = list.get(0) * list.get(1);
                            list.clear();
                            list.add(0, tmp);
                        } else {
                            tmp = list.get(2) * list.get(1);
                            list.remove(2);
                            list.remove(1);
                            list.add(tmp);
                        }
                        break;
                    case '÷':
                        if (i == (string.length() - 1))
                            return "error";
                        while (!(i == (string.length() - 1))
                                && !Judge.paiduan((c = string.charAt(i + 1)))) {
                            str += c;
                            i++;
                        }

                        if (str.length() != 0)
                            list.add(new Double(str));
                        str = "";

                        if (list.size() == 2) {
                            tmp = list.get(0) / list.get(1);
                            list.clear();
                            list.add(0, tmp);
                        } else {
                            tmp = list.get(2) / list.get(1);
                            list.remove(2);
                            list.remove(1);
                            list.add(tmp);
                        }
                        break;
                    default:
                        break;
                }
            }
        }

        if (str.length() != 0)
            list.add(new Double(str));

        if (2 == list.size()) {
            if (add_flag) {
                tmp = list.get(0) + list.get(1);
                list.clear();
                list.add(tmp);
            } else {
                tmp = list.get(0) - list.get(1);
                list.clear();
                list.add(tmp);
            }
        }
        if (list.size() != 0)
            string = "" + list.get(0);

        return string;
    }

    public String get_r_digit(String string, int index) {
        // 得到index右边的第一个数;
        String tmp = "";
        int length = string.length(), j = index;
        Character character;

        if (index >= length)
            tmp = "error";

        while (true) {
            if (j == length)
                break;

            character = string.charAt(j);
            if (Character.isDigit(character) || (character == '.')) {
                tmp += character;
            } else
                break;
            j++;
        }

        if (0 == tmp.length())
            tmp = "error";
        System.out.println(tmp);
        return tmp;
    }

    public String get_l_digit(String string, int index) {
        // 得到index左边的第一个数;
        String tmp = "";
        int j = index;
        Character c;

        if (index < 0)
            tmp = "error";

        while (true) {
            if (j < 0)
                break;

            c = string.charAt(j);
            if (Character.isDigit(c) || (c == '.')) {
                tmp = "" + c + tmp;
            } else
                break;
            j--;
        }

        if (0 == tmp.length())
            tmp = "error";

        return tmp;
    }

    public String dispose1(String string) {
        // 将π替换为对应的数字;
        int index, leng = string.length();
        double tmp = Math.PI;
        while (leng != 0) {

            index = string.indexOf("π");

            if (-1 == index)
                break;

            if ((index != 0 && (index + 1) != leng)
                    && Character.isDigit(string.charAt(index + 1))
                    && Character.isDigit(string.charAt(index - 1))) {
                string = string.replaceFirst("π", "×" + tmp + "×");
            } else if (index != 0
                    && Character.isDigit(string.charAt(index - 1))) {
                string = string.replaceFirst("π", "×" + tmp);
            } else if (index != 0
                    && Character.isDigit(string.charAt(index + 1))) {
                string = string.replaceFirst("π", "" + tmp + "×");
            } else {
                string = string.replaceFirst("π", "" + tmp);
            }

        }
        return string;
    }

    public String dispose(String string, String dispose) {
        // 处理指定运算符;<log,ln,sin,cos,tan....>
        int index, flag = dispose.length(), flag1, flag2;
        String tmpString = "", tmpString1 = "", tmpString2 = "";
        Double tmp, tmp1;
        while (string.length() != 0) {
            index = string.indexOf(dispose);

            if (-1 == index)
                break;

            if ("!".equals(dispose)) {
                tmpString = get_l_digit(string, index - flag);
                if (!"error".equals(tmpString) && !"error".equals(tmpString1)) {
                    tmp = new Double(tmpString);
                } else {
                    return "error";
                }

                tmp1 = 1.0;
                for (int i = 1; i <= tmp; i++) {
                    tmp1 *= i;
                }

                tmpString2 = "" + tmp1;
                string = string.replaceFirst(tmpString + dispose, tmpString2);

            } else if ("e".equals(dispose)) {
                tmpString = get_r_digit(string, index + flag);
                tmpString1 = get_l_digit(string, index - flag);

                if (!"error".equals(tmpString) && !"error".equals(tmpString1)) {
                    tmp = new Double(tmpString);
                    tmp1 = new Double(tmpString1);
                } else {
                    return "error";
                }

                tmp = Math.pow(10, tmp);
                tmp1 *= tmp;

                tmpString2 = "" + tmp1;
                string = string.replaceFirst(tmpString1 + dispose + tmpString,
                        tmpString2);
                System.out.println(string);

            } else if ("^".equals(dispose)) {
                tmpString = get_r_digit(string, index + flag);
                tmpString1 = get_l_digit(string, index - flag);

                flag1 = tmpString.length();
                flag2 = tmpString1.length();

                if (!"error".equals(tmpString) && !"error".equals(tmpString1)) {
                    tmp = new Double(tmpString);
                    tmp1 = new Double(tmpString1);
                } else {
                    return "error";
                }

                tmp = Math.pow(tmp1, tmp);
                tmpString2 = "" + tmp;
                flag1 = index + flag1 + 1;
                flag2 = index - flag2;

                if (0 == flag2) {
                    tmpString = "";
                } else {
                    tmpString = string.substring(0, flag2);
                }
                if (string.length() == flag1) {
                    tmpString1 = "";
                } else {
                    tmpString1 = string.substring(flag1, string.length());
                }

                string = tmpString + tmpString2 + tmpString1;

            } else {
                tmpString = get_r_digit(string, index + flag);
                flag1 = tmpString.length();
                if (!"error".equals(tmpString))
                    tmp = new Double(tmpString);
                else {
                    return "error";
                }
                tmpString2 = tmpString;

                if ("sin".equals(dispose)) {
                    if ("error".equals(tmp))
                        return "error";
                    tmp = Math.sin(tmp);
                } else if ("cos".equals(dispose)) {
                    if ("error".equals(tmp))
                        return "error";
                    tmp = Math.cos(tmp);
                } else if ("tan".equals(dispose)) {
                    if ("error".equals(tmp))
                        return "error";
                    tmp = Math.tan(tmp);
                } else if ("log".equals(dispose)) {
                    if ("error".equals(tmp))
                        return "error";
                    tmp = Math.log10(tmp);
                } else if ("ln".equals(dispose)) {
                    if ("error".equals(tmp))
                        return "error";
                    tmp = Math.log(tmp);
                } else if ("√".equals(dispose)) {
                    if ("error".equals(tmp))
                        return "error";
                    tmp = Math.sqrt(tmp);
                } else if ("log".equals(dispose)) {
                    if ("error".equals(tmp))
                        return "error";
                    tmp = Math.log(tmp);
                }

                if (index != 0
                        && Character.isDigit(string.charAt(index - 1))) {
                    tmpString = "×" + tmp;
                } else {
                    tmpString = "" + tmp;
                }
                string = string.replaceFirst(dispose + tmpString2, tmpString);
            }
        }

        return string;
    }

    public String advanced_dispose(String string) {
        string = this.dispose1(string);
        string = this.bracke_dispose(string);
        string = this.alg_dispose(string);
        return string;
    }
}

java类Judge代码:

package com.xueba.jsq;

public class Judge {
    public String judge(String string, String c) {
        switch (string.charAt(string.length() - 1)) {
            case '+':
            case '-':
            case '×':
            case '÷':
                string = string.substring(0, string.length() - 1) + c;
                break;
            default:
                string += c;
                break;
        }
        return string;
    }

    public static String dispose(String string) {
        int leng = string.length() - 1;
        Character character;
        if (0 == leng) {
            return "error";
        }
        for (int i = 0; i < leng; i++) {
            character = string.charAt(i);
            if (Character.isLetter(character)) {
                return "error";
            }

        }

        return string;
    }

    public String judge1(String string) {
        int p = string.length() - 1;
        boolean flag = true;
        Character tmp = string.charAt(p);

        if (0 == p)
            string += ".";

        if (Character.isDigit(tmp) && 0 != p) {
            while (flag) {
                if (!Character.isDigit(tmp)) {
                    flag = false;
                    if (tmp != '.')
                        string += ".";
                }

                if (0 == --p && (tmp != '.')) {
                    string += ".";
                    break;
                }

                tmp = string.charAt(p);
            }

        }
        return string;
    }

    public static boolean paiduan(Character c) {
        switch (c) {
            case '+':
            case '-':
            case '×':
            case '÷':
                return true;
            default:
                return false;
        }
    }

    public String digit_judge(String string, String c, boolean flag) {
        if ("0".equals(string)) {
            string = c;
        } else if (flag) {
            string = c;
        } else
            string += c;
        return string;
    }

    public String digit_dispose(String string) {
        if ("error".equals(string)) {
            return string;
        }

        Double double1 = new Double(string);

        if(double1>999999999999999.0)
            return "∞";

        long l = (long) (double1 * 1e4);
        double1 = (Double) (l / 1e4);

        string = "" + double1;
        return string;
    }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • Android Studio实现简易计算器App (Java语言版)

    本文实例为大家分享了Android Studio实现简易计算器App的具体代码,供大家参考,具体内容如下 效果演示 布局文件 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"     android:orientation="vertical&qu

  • Android Studio实现简易计算器(表格布局TableLayout)

    这是一个运用网格布局来做的简易计算器,可能没有那么美观,大家可以继续完善 首先先看看成果吧 首先先建一个新的Project Calculator 然后先编写颜色背景文件 创建一个gray.xml,哪里创建呢?如图 在drawable下右击,选择new–Drawable resource file 第一个是文件名字,第二个属性可以自己选择,我们这里前两个文件选择shape,第三个文件选selector,附上颜色背景代码 gray.xml <?xml version="1.0" en

  • Android Studio实现简易进制转换计算器

    本文实例为大家分享了Android Studio实现简易进制转换计算器的具体代码,供大家参考,具体内容如下 1.问题描述 设计并实现一个数制转换器,能够对输入的任- -进制类型的数值转换为指定的数制类型的数值.必须实现的数制类型有二进制.八进制.十进制和十六进制四种. 2.基本要求 (1)使用Spinner 控件,列出四种数制类型,即:二进制.八进制.十进制和十六进制;(2)“数值”输入框,不使用Android系统提供的输入面板,进行数值输入;且只能是整数数值; 布局代码: <?xml vers

  • Android Studio实现简易计算器设计

    本文实例为大家分享了Android Studio实现简易计算器的具体代码,供大家参考,具体内容如下 一.题目 1.如图所示(实际设计,类似此界面样式即可,全屏时,按钮将会纵向拉伸),利用网格布局管理器设计一个居中.满屏计算器,项目名称:clc666b:(666,改成自己的实际编号) 2.加.乘分别用2个单选按钮进行选择: 3.为clc666b编写程序(clc666a不需要编程,只设计界面即可),根据选择的加(乘)单选按钮,实现两个数的加法和乘法的简单计算. 4.为了简化程序设计,上方的数据区也可

  • android studio实现简单的计算器小功能

    本文实例为大家分享了android studio实现简单计算器的具体代码,供大家参考,具体内容如下 布局: <?xml version="1.0" encoding="utf-8"?> <LinearLayout     xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:tools="http://schemas.android.c

  • 用Android studio实现简易计算器功能

    用Android studio做一个简易计算器,供大家参考,具体内容如下 长话短说,先建立一个Android项目: 创建完成后打开activity_main.xml,构建我们的应用界面,输入以下代码: <?xml version="1.0" encoding="utf-8"?> <GridLayout  xmlns:android="http://schemas.android.com/apk/res/android"    

  • Android Studio实现简单计算器功能

    本文实例为大家分享了Android Studio实现简单计算器功能的具体代码,供大家参考,具体内容如下 程序步骤: (1)在布局文件定义一些计算器界面的文本框,按钮等组件. (2)在Activity中获取组件实例. (3)通过swtich函数,判断输入的内容,并进行相应操作,通过getText()获取文本内容,setText()显示. 程序代码设计: 一.界面布局 参考书本例2-9,应用网格布局设计计算器界面,在设计区域设置一个6行4列的网格布局,第一行为显示数据的文本标签,第二行为清除数据的按

  • android studio 项目 :UI设计高精度实现简单计算器

    UI设计: 实验目的: 自主完成一个简单APP的设计工作,综合应用已经学到的Android UI设计技巧,重点注意合理使用布局.实验要求: 1.完成一个计算器的设计,可以以手机自带的计算器为参考.设计过程中,注意考虑界面的美观性,不同机型的适应性,以及功能的完备性. 2.注意结合Activity的生命周期,考虑不同情况下计算器的界面状态. 3.如有余力,可以考虑实现一个高精度科学计算型的计算器. 实现效果: 整数和浮点数的加减乘除.取余.开根号,异号.清零 计算结果全部实现. 精度保留到小数点后

  • Android studio实现简单的计算器

    本文实例为大家分享了Android studio实现简单计算器的具体代码,供大家参考,具体内容如下 需求分析及概要设计 目的 开发一个简单的计算器App,使之能够完成加减乘除混合运算 工具及环境 使用java语言,在Android studio平台上进行开发 功能设计 "+":实现两数相加 "-":实现两数相减 "*":实现两数相乘 "/":实现两数相除 "=":计算并得出正确结果 "C"

  • Android studio实现简易计算器App功能

    在Android studio实现简易计算器App并实现加减乘除功能,供大家参考,具体内容如下 结果 activity_main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"       android:layout_width="ma

随机推荐