用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;
    }
}

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