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


Posted in Java/Android onMay 20, 2022

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

界面效果图:

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

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

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


Tags in this post...

Java/Android 相关文章推荐
JPA如何使用entityManager执行SQL并指定返回类型
Jun 15 Java/Android
深入理解java.lang.String类的不可变性
Jun 27 Java/Android
Java基础之详解HashSet的使用方法
Jun 30 Java/Android
Java实现给Word文件添加文字水印
Feb 15 Java/Android
你知道Java Spring的两种事务吗
Mar 16 Java/Android
spring cloud eureka 服务启动失败的原因分析及解决方法
Mar 17 Java/Android
Spring Security使用单点登录的权限功能
Apr 03 Java/Android
Spring Cloud Netflix 套件中的负载均衡组件 Ribbon
Apr 13 Java/Android
Spring 使用注解开发
May 20 Java/Android
Java中生成微信小程序太阳码的实现方案
Jun 01 Java/Android
Android 中的类文件和类加载器详情
Jun 05 Java/Android
Spring Cloud OpenFeign模版化客户端
Jun 25 Java/Android
springcloud整合seata
springboot读取nacos配置文件
May 20 #Java/Android
Android studio 简单计算器的编写
May 20 #Java/Android
mybatis 获取更新记录的id
May 20 #Java/Android
Android Studio 计算器开发
May 20 #Java/Android
Android Studio实现简易进制转换计算器
May 20 #Java/Android
Spring 使用注解开发
May 20 #Java/Android
You might like
聊天室php&amp;mysql(二)
2006/10/09 PHP
yii2带搜索功能的下拉框实例详解
2016/05/12 PHP
jquery图片上下tab切换效果
2011/03/18 Javascript
jquery拖动插件(jquery.drag)使用介绍
2013/06/18 Javascript
jQuery之日期选择器的深入解析
2013/06/19 Javascript
图标线性回归斜着移动到指定的位置
2013/08/16 Javascript
jQuery实现密保互斥问题解决方案
2013/08/16 Javascript
js charAt的使用示例
2014/02/18 Javascript
jquery.idTabs 选项卡使用示例代码
2014/09/03 Javascript
JS显示表格内指定行html代码的方法
2015/03/31 Javascript
jQuery获得指定元素坐标的方法
2015/04/14 Javascript
Bootstrap每天必学之表格
2015/11/23 Javascript
浅谈JS使用[ ]来访问对象属性
2016/09/21 Javascript
jQuery实现的动态文字变化输出效果示例【附演示与demo源码下载】
2017/03/24 jQuery
微信小程序对接七牛云存储的方法
2017/07/30 Javascript
javascript算法之二叉搜索树的示例代码
2017/09/12 Javascript
微信小程序页面间值传递的两种方法
2018/11/26 Javascript
JavaScript实现的3D旋转魔方动画效果实例代码
2019/07/31 Javascript
Node.js 实现抢票小工具 &amp; 短信通知提醒功能
2019/10/22 Javascript
jQuery 选择方法及$(this)用法实例分析
2020/05/19 jQuery
Python内置数据结构与操作符的练习题集锦
2016/07/01 Python
基于Python os模块常用命令介绍
2017/11/03 Python
Python面向对象之继承代码详解
2018/01/29 Python
Python3实现带附件的定时发送邮件功能
2020/12/22 Python
Ubuntu下使用Python实现游戏制作中的切分图片功能
2018/03/30 Python
python实现音乐下载器
2018/04/15 Python
python2.7和NLTK安装详细教程
2018/09/19 Python
解决pycharm py文件运行后停止按钮变成了灰色的问题
2018/11/29 Python
美国演唱会和体育门票购买网站:Ticketnetwork
2018/10/19 全球购物
两道JAVA笔试题
2016/09/14 面试题
内部类的定义、种类以及优点
2013/10/16 面试题
自荐信格式范文
2013/10/07 职场文书
白酒业务员岗位职责
2013/12/27 职场文书
党员教师工作决心书
2014/03/13 职场文书
教师自查自纠工作情况报告
2014/10/29 职场文书
感恩节寄语2015
2015/03/24 职场文书