Android——简单计算器

接触安卓的第一周看了四大布局的线性布局就开始做自己的第一个App,刚开始做的时候完全是懵的。看了《第一行代码》只是知道有布局这么个东西完全不知道该如何用,就去看了很多人写的。最后采用了线性布局的嵌套线性布局,总之写起来还是比较顺畅的。还有就是需要会中缀转后缀表达式和后缀表达式的计算,这也算是核心的代码了。

一.计算器界面

刚才上面说了采用的线性布局。先贴上我的代码:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:weightSum="10">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:orientation="vertical"
        android:layout_weight="3">

        <TextView
            android:id="@+id/text_view1"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="2"
            android:textSize="55sp"
            android:gravity="bottom|right"
            android:ellipsize="none"//不做任何处理(会将要显示的文字截断)
            android:scrollbars="none"//无滚动条
            android:singleLine="true"//控制textview里只有一行字,不执行换行
            />

        <TextView
            android:id="@+id/text_view2"
            android:layout_width="match_parent"
            android:layout_height="0dp"
            android:layout_weight="2"
            android:textSize="50sp"
            android:gravity="bottom|right"
            android:ellipsize="none"
            android:scrollbars="none"
            android:singleLine="true"
         />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="7"
        android:orientation="horizontal"
        android:weightSum="21"
        >

        <LinearLayout
            android:orientation="vertical"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="5"
            >
                <Button
                    android:id="@+id/btn_left"
                    android:layout_width="match_parent"
                    android:layout_height="0dp"
                    android:layout_weight="1"
                    android:text="("
                    android:textSize="30sp"
                    android:background="#FFF5EE"
                    />
                <Button
                    android:id="@+id/btn_7"
                    android:layout_width="match_parent"
                    android:layout_height="0dp"
                    android:layout_weight="1"
                    android:text="7"
                    android:textSize="30sp"
                    android:background="#DCDCDC"
                    />
                <Button
                    android:id="@+id/btn_4"
                    android:layout_width="match_parent"
                    android:layout_height="0dp"
                    android:layout_weight="1"
                    android:text="4"
                    android:textSize="30sp"
                    android:background="#DCDCDC"
                    />
                <Button
                    android:id="@+id/btn_1"
                    android:layout_width="match_parent"
                    android:layout_height="0dp"
                    android:layout_weight="1"
                    android:text="1"
                    android:textSize="30sp"
                    android:background="#DCDCDC"
                    />
                <Button
                    android:id="@+id/btn_point"
                    android:layout_width="match_parent"
                    android:layout_height="0dp"
                    android:layout_weight="1"
                    android:text="."
                    android:textSize="30sp"
                    android:background="#DCDCDC"/>

        </LinearLayout>

        <LinearLayout
            android:orientation="vertical"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="5">

            <Button
                android:id="@+id/btn_right"
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_weight="1"
                android:background="#FFF5EE"
                android:text=")"
                android:textSize="30sp" />
            <Button
                android:id="@+id/btn_8"
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_weight="1"
                android:text="8"
                android:textSize="30sp"
                android:background="#DCDCDC"/>
            <Button
                android:id="@+id/btn_5"
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_weight="1"
                android:text="5"
                android:textSize="30sp"
                android:background="#DCDCDC"/>
            <Button
                android:id="@+id/btn_2"
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_weight="1"
                android:text="2"
                android:textSize="30sp"
                android:background="#DCDCDC"/>
            <Button
                android:id="@+id/btn_0"
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_weight="1"
                android:text="0"
                android:textSize="30sp"
                android:background="#DCDCDC"/>
        </LinearLayout>

        <LinearLayout
            android:orientation="vertical"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="5"
            >
            <Button
                android:id="@+id/btn_AC"
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_weight="1"
                android:text="AC"
                android:textSize="30sp"
                android:background="#FFF5EE"/>
            <Button
                android:id="@+id/btn_9"
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_weight="1"
                android:text="9"
                android:textSize="30sp"
                android:background="#DCDCDC"/>
            <Button
                android:id="@+id/btn_6"
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_weight="1"
                android:text="6"
                android:textSize="30sp"
                android:background="#DCDCDC"/>
            <Button
                android:id="@+id/btn_3"
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_weight="1"
                android:text="3"
                android:textSize="30sp"
                android:background="#DCDCDC"/>
            <Button
                android:id="@+id/btn_equals"
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_weight="1"
                android:text="="
                android:textSize="40sp"
                android:background="#FFF5EE"/>

        </LinearLayout>

        <LinearLayout
            android:orientation="vertical"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_weight="6"
            >
            <Button
                android:id="@+id/btn_clear"
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_weight="1"
                android:text="☒"
                android:textAllCaps="false"
                android:textSize="30sp"
                android:background="#FFF5EE"/>
            <Button
                android:id="@+id/btn_divide"
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_weight="1"
                android:text="÷"
                android:textSize="30sp"
                android:background="#FFF5EE"/>
            <Button
                android:id="@+id/btn_mutiply"
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_weight="1"
                android:text="×"
                android:textSize="40sp"
                android:background="#FFF5EE"/>
            <Button
                android:id="@+id/btn_minus"
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_weight="1"
                android:text="-"
                android:textSize="30sp"
                android:background="#FFF5EE"/>
            <Button
                android:id="@+id/btn_add"
                android:layout_width="match_parent"
                android:layout_height="0dp"
                android:layout_weight="1"
                android:text="+"
                android:textSize="30sp"
                android:background="#FFF5EE"/>

        </LinearLayout>
    </LinearLayout>
</LinearLayout>

这里写图片描述
这是显示出来的样子。
我认为开始写线性布局之前,我们的脑子里应该有一个自己想要的布局的样子,然后为他们分配各自的比重。你从大的方向上分,比如说我的计算器界面。我在最外层的 给我的整个布局android:weightSum=”10”
分成了十份,接下来输入部分和数字控件部分3、7分。这就是线性布局的嵌套,上面的部分是纵向布局,下面的部分是横向布局。之后再在这两个部分里继续分。

二.实现控件上字符的显示

在写这一部分真的也很懵,因为自己学java才不到两个礼拜,觉得对java的理解还不够深,对安卓刚开始的findViewbyId()、setOnClickListener()部分的代码很迷,参考别人的代码自己尝试着写,整个写完再回头看自己逐渐理解了这部分代码的意思。
下面是我的代码:

public class Caculator extends AppCompatActivity implements View.OnClickListener {
    Button btn_0;//先将自己写的控件定义在这里
    Button btn_1;
    Button btn_2;
    Button btn_3;
    Button btn_4;
    Button btn_5;
    Button btn_6;
    Button btn_7;
    Button btn_8;
    Button btn_9;
    Button btn_AC;//清空
    Button btn_left;
    Button btn_right;
    Button btn_add;
    Button btn_minus;
    Button btn_mutiply;
    Button btn_divide;
    Button btn_clear;//删除
    Button btn_equals;
    Button btn_point;
    private TextView text_view1;
    private TextView text_view2;
    private StringBuilder pending = new StringBuilder();//构造一个没有字符的字符串构建器,初始容量为16个字符


    private void initView() {
        text_view1= (TextView)findViewById(R.id.text_view1);
        text_view1.setMovementMethod(new ScrollingMovementMethod(){});//是textview里的字符串手动左右滑动
        text_view2= (TextView)findViewById(R.id.text_view2);
        text_view2.setMovementMethod(new ScrollingMovementMethod(){});
        btn_0 = (Button) findViewById(R.id.btn_0);//获取到在布局文件文件中定义的元素
        btn_1 = (Button) findViewById(R.id.btn_1);
        btn_2 = (Button) findViewById(R.id.btn_2);
        btn_3 = (Button) findViewById(R.id.btn_3);
        btn_4 = (Button) findViewById(R.id.btn_4);
        btn_5 = (Button) findViewById(R.id.btn_5);
        btn_6 = (Button) findViewById(R.id.btn_6);
        btn_7 = (Button) findViewById(R.id.btn_7);
        btn_8 = (Button) findViewById(R.id.btn_8);
        btn_9 = (Button) findViewById(R.id.btn_9);
        btn_AC = (Button) findViewById(R.id.btn_AC);
        btn_left = (Button) findViewById(R.id.btn_left);
        btn_right = (Button) findViewById(R.id.btn_right);
        btn_add = (Button) findViewById(R.id.btn_add);
        btn_minus = (Button) findViewById(R.id.btn_minus);
        btn_mutiply = (Button) findViewById(R.id.btn_mutiply);
        btn_divide = (Button) findViewById(R.id.btn_divide);
        btn_clear = (Button) findViewById(R.id.btn_clear);
        btn_equals = (Button) findViewById(R.id.btn_equals);
        btn_point = (Button) findViewById(R.id.btn_point);


        btn_0.setOnClickListener(this);//为按钮注册一个监听器,点击按钮时就会执行监听器中的onclick()方法
        btn_1.setOnClickListener(this);
        btn_2.setOnClickListener(this);
        btn_3.setOnClickListener(this);
        btn_4.setOnClickListener(this);
        btn_5.setOnClickListener(this);
        btn_6.setOnClickListener(this);
        btn_7.setOnClickListener(this);
        btn_8.setOnClickListener(this);
        btn_9.setOnClickListener(this);
        btn_AC.setOnClickListener(this);
        btn_left.setOnClickListener(this);
        btn_right.setOnClickListener(this);
        btn_add.setOnClickListener(this);
        btn_minus.setOnClickListener(this);
        btn_mutiply.setOnClickListener(this);
        btn_divide.setOnClickListener(this);
        btn_clear.setOnClickListener(this);
        btn_equals.setOnClickListener(this);
        btn_point.setOnClickListener(this);
        text_view1.setOnClickListener(this);
        text_view2.setOnClickListener(this);
    }

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

        initView();
    }

    @Override
    public void onClick(View v) {
        int last = 0;//最后一个字符
        int last_q = 0;//倒数第二个字符
        int last_qq=0;//倒数第三个字符
        if (pending.length() != 0) {
            last = pending.codePointAt(pending.length() - 1);
            if (pending.length() > 1) {
                last_q =pending.codePointAt(pending.length() - 2);
            }
            if(pending.length()>=3){
                last_qq=pending.codePointAt(pending.length()-3);
            }
        }
        switch (v.getId()) {
            case R.id.btn_0:
                if (last != ')') {
                    pending = pending.append("0");
                }
                else {
                    pending = pending.replace(pending.length() - 1, pending.length(), "0");
                }
                text_view1.setText(pending);
                break;

            case R.id.btn_1:
                if (last != ')') {
                    pending = pending.append("1");
                } else {
                    pending = pending.replace(pending.length() - 1, pending.length(), "1");
                }
                text_view1.setText(pending);
                break;

            case R.id.btn_2:
                if (last != ')') {
                    pending = pending.append("2");
                }
                else {
                    pending = pending.replace(pending.length() - 1, pending.length(), "2");
                }
                text_view1.setText(pending);
                break;

            case R.id.btn_3:
                if (last != ')') {
                    pending = pending.append("3");
                } else {
                    pending = pending.replace(pending.length() - 1, pending.length(), "3");
                }
                text_view1.setText(pending);
                break;

            case R.id.btn_4:
                if (last != ')') {
                    pending = pending.append("4");
                } else {
                    pending = pending.replace(pending.length() - 1, pending.length(), "4");
                }
                text_view1.setText(pending);
                break;

            case R.id.btn_5:
                if (last != ')') {
                    pending = pending.append("5");
                } else {
                    pending = pending.replace(pending.length() - 1, pending.length(), "5");
                }
                text_view1.setText(pending);
                break;

            case R.id.btn_6:
                if (last != ')') {
                    pending = pending.append("6");
                } else {
                    pending = pending.replace(pending.length() - 1, pending.length(), "6");
                }
                text_view1.setText(pending);
                break;

            case R.id.btn_7:
                if (last != ')') {
                    pending = pending.append("7");
                } else {
                    pending = pending.replace(pending.length() - 1, pending.length(), "7");
                }
                text_view1.setText(pending);
                break;

            case R.id.btn_8:
                if (last != ')') {
                    pending = pending.append("8");
                } else {
                    pending = pending.replace(pending.length() - 1, pending.length(), "8");
                }
                text_view1.setText(pending);
                break;

            case R.id.btn_9:
                if (last != ')') {
                    pending = pending.append("9");
                } else {
                    pending = pending.replace(pending.length() - 1, pending.length(), "9");
                }
                text_view1.setText(pending);
                break;

            case R.id.btn_left:
                if ((last < '0' || last > '9') && last != '.' && last != ')') {
                    pending = pending.append("(");
                    text_view1.setText(pending);
                }
                break;

            case R.id.btn_right:
                if ((last >='0' && last <= '9' || last != ')') && judge_1() == 1){
                    pending=pending.append(")");
                    text_view1.setText(pending);
                }
                break;

            case R.id.btn_add://加法
                if((last>='0' && last<='9') || last==')'){
                    pending=pending.append("+");
                }
                else if(pending.length()>1 && last!='('){
                    pending=pending.replace(pending.length()-1,pending.length(),"+");
                }
                if(pending.length()>1 && last=='-' && (last_q=='×' || last_q=='÷')){
                    pending=pending.replace(pending.length()-2,pending.length(),"+");
                }
                text_view1.setText(pending);
                break;

            case R.id.btn_minus://减法
                if((last>='0' && last<='9') || last==')' || last=='×' || last=='÷' || pending.length()==0){
                    pending=pending.append("-");
                }
                else if(pending.length()>1 && last!='('){
                    pending=pending.replace(pending.length()-1,pending.length(),"-");
                }
                if(pending.length()>1 && last=='(' && (last_q=='÷' || last_q=='×')){
                    pending=pending.append("-");
                }
                else if(pending.length()>1 && last=='(' && last_q=='-' && (last_qq=='÷' || last_qq=='×')){
                    pending=pending.replace(pending.length()-2,pending.length(),"(");
                    pending=pending.append("-");
                }
                if(pending.length()>1 && last=='-'&& (last_q=='×' || last_q=='÷')){
                    pending=pending.replace(pending.length()-2,pending.length(),"-");
                }
                text_view1.setText(pending);
                break;

            case R.id.btn_mutiply://乘法
                if(last>='0' && last<='9' || last==')'){
                    pending=pending.append("×");
                }
                else if(pending.length()>1 && last!='('){
                    pending=pending.replace(pending.length()-1,pending.length(),"×");
                }
                if(pending.length()>1 && last=='-'&& (last_q=='×' || last_q=='÷')){
                pending=pending.replace(pending.length()-2,pending.length(),"×");
                }
                text_view1.setText(pending);
                break;

            case R.id.btn_divide:
                if(last>='0' && last<='9' || last==')'){
                    pending=pending.append("÷");
                }
                else if(pending.length()>1 && last!='('){
                    pending=pending.replace(pending.length()-1,pending.length(),"÷");
                }
                if(pending.length()>1 && last=='-'&& (last_q=='×' || last_q=='÷')){
                pending=pending.replace(pending.length()-2,pending.length(),"÷");
                }
                text_view1.setText(pending);
                break;

            case R.id.btn_AC://清空
                pending = pending.delete(0, pending.length());
                text_view1.setText(pending);
                text_view2.setText(pending);
                break;

            case R.id.btn_clear:
                if(pending.length()!=0){
                    pending=pending.delete(pending.length()-1,pending.length());
                    text_view1.setText(pending);
                }
                break;

            case R.id.btn_point:
                if(judge_2()==1){
                    pending=pending.append(".");
                    text_view1.setText(pending);
                }
                break;

            case R.id.btn_equals:{
                int m=judge_1();
                if(m==0){
                    String s = pending.toString();
                    if(s.length()!=0)
                    text_view2.setText(use(s));
                    pending=pending.delete(0,pending.length());//清空之前的字符串,新的运算开始
                    break;
                }
                else
                    break;//若括号不匹配就不能得出结果
,程序结束。                }
            }
        }

    private int judge_1() {
        int a = 0, b = 0;
        for (int i = 0; i < pending.length(); i++) {
            if (pending.charAt(i) == '(') {
                a++;
            }
            if (pending.charAt(i) == ')') {
                b++;
            }
        }
        if(a==b){
            return 0;
        }
        if (a > b) {
            return 1;
        }
        return 2;
    }

    private int judge_2(){
        int i=pending.length()-1;
        int j=0;
        char[] arr = new char[1000];
        while(i!=-1){
            if(pending.charAt(i)=='+' || pending.charAt(i)=='-' || pending.charAt(i)=='×' || pending.charAt(i)=='÷' || pending.charAt(i)=='('){
                break;
            }
            arr[j++]=pending.charAt(i);
            i--;
        }
        for(int k=0;k<arr.length;k++){
            if(arr[k]=='.'){
                return 0;
            }
        }
        return 1;
    }
}

在计算器写好后,我们测试时经常会崩,这是因为我们没有考虑到各种异常的情况,比如3/-(-3*7),所以在对控件做响应的时候需要考虑到很多情况,尽可能的不让自己的计算器崩溃。(特别要注意括号的配对问题、减号与负号的问题、还有当输入的操作符不合理时计算器会如何处理,这都是我们需要考虑的)

三.解析字符串。

在中缀转后缀表达式之前,我将字符串解析,即就是将数字符号按顺序放到一个新的集合中,为了之后运算方便。
下面是我的代码:

    public static int t;
   public static List<String> AnalyseString(String s){
        char p = s.charAt(s.length()-1);
        if(p=='+' || p=='-' || p=='×' || p=='÷'){
            s = s.substring(0,s.length()-1);
        }
        List<String> list = new ArrayList<>();
        if(s.charAt(0)=='-'){
            int k;
            StringBuilder bn = new StringBuilder();
            bn.append('-');
            for(k=1;k<s.length();k++){
                if(s.charAt(k)>='0' && s.charAt(k)<='9' || s.charAt(k)=='.'){
                    bn.append(s.charAt(k));
                }
                else{
                    break;
                }
            }
            list.add(bn.toString());
            t=k;
        }//考虑第一个数为负数
        for(int i=t;i<s.length();i++){
            char ch=s.charAt(i);
            if(ch=='+' || ch=='-' || ch=='×' || ch=='÷' || ch=='(' || ch==')'){
                if((ch=='×' || ch=='÷') && s.charAt(i+1)=='-'){
                    String str = s.substring(i,i+1);
                    String str2 = s.substring(i+1,i+3);
                    list.add(str);
                    list.add(str2);
                    i=i+2;
                }
                else if((ch=='×' || ch=='÷') && s.charAt(i+1)=='(' && s.charAt(i+2)=='-'){
                    String str = s.substring(i,i+1);
                    String str2 = s.substring(i+1,i+2);
                    list.add(str);
                    list.add(str2);
                    int q;
                    StringBuilder s3 = new StringBuilder();
                    s3.append("-");
                    for(q=i+3;q<s.length();q++){
                        if(s.charAt(q)>='0' && s.charAt(q)<='9' || s.charAt(q)=='.'){
                            s3.append(s.charAt(q));
                        }
                        else{
                            break;
                        }
                    }
                    list.add(s3.toString());
                    i=q-1;
                }
                else if(ch=='(' && s.charAt(i+1)=='-'){
                    String str = s.substring(i,i+1);
                    String str2 = s.substring(i+1,i+3);
                    list.add(str);
                    list.add(str2);
                    i=i+2;
                }
                else{
                    String str = s.substring(i,i+1);
                    list.add(str);
                }
            }
            else if(ch>='0' && ch<='9' || ch=='.'){
                int j;
                StringBuilder s2 = new StringBuilder();
                for (j = i; j < s.length(); j++) {
                    char c = s.charAt(j);
                    if (c >= '0' && c <= '9' || c == '.') {
                        s2.append(c);
                    } else {
                        break;
                    }
                }
                list.add(s2.toString());
                i = j - 1;
            }
        }
        return list;
    }

解析字符串的时候要考虑符号的问题,我是将符号和数字绑定在了一起。

四.中缀转后缀表达式

步骤:
先设置两个栈,S1和S2
S2为运算符栈,开始遍历集合

  • 若是数字字符串,则将其压入S1;
  • 若是运算符字符串:
    如果是“( ”,则将其直接压入S2;
    如果是“ + ”、“ - ”、“ * ”、“ / ”,则需要判断栈顶符号的优先级是否比自己 大,如果比自己小则直接压入S2,如果比自己大则栈顶符号出S2栈进入S1栈,然后自己再进入S2栈。
    如果是“ )”,则需要从S2中弹出符号并进入S1,直到找到符号“( ”,并删除符号“ ( ”。

    下面是我的代码:

private static Stack<String> transferToPostfix(List list) {
        Stack<String> s1 = new Stack<>();//
        Stack<String> s2 = new Stack<>();//字符栈
        for (int i = 0; i < list.size(); i++) {
            String st = (String) list.get(i);
            if (st.charAt(0) >= '0' && st.charAt(0) <= '9' || st.length()>1) {
                    s1.push(st);
            }
            else if(st.equals("(")){
                s2.push(st);
            }
            else if (st.equals(")")) {
                while (!s2.peek().equals("(")) {
                    s1.push(s2.pop());
                }
                s2.pop();
            } else if (s2.empty() || s2.peek().equals("(") || getProvity(st) > getProvity(s2.peek())) {
                s2.push(st);
            } else {
                while (getProvity(st) <= getProvity(s2.peek())) {
                    s1.push(s2.pop());
                    if (s2.empty()) {
                        s2.push(st);
                        break;
                    }
                    if(s2.peek().equals("(")){
                        s2.push(st);
                        break;
                    }
                }
            }
        }
        while (!s2.empty()) {
            s1.push(s2.pop());
        }
        return s1;
    }

 private static int getProvity(String ch) {
        switch (ch) {
            case "+":
            case "-":
                return 1;
            case "×":
            case "÷":
                return 2;
        }
        return 0;
    }

五.后缀表达式的计算

步骤:

  • 从头遍历S1,若是数字字符串则进入栈S3,遇到符号字符串,依次从栈S3中弹出两个数,先弹出的做减数或者除数,后弹出的做被减数或被除数,得出的结果再进入栈S3中,在重复上述操作直到输出结果。

    下面是我的代码:

 private static String getResult(Stack s1){
        Stack<String> s3 = new Stack<>();
        for(int i=0;i<s1.size();i++){
            String s = (String) s1.get(i);
            if(s.charAt(0)>='0' && s.charAt(0)<='9' || s.length()>1){
                s3.push(s);
            }
            else{
                String num1=(String) s3.pop();
                String num2=(String) s3.pop();
                String operator = s;
                if(operator.equals("÷") && num1.equals("0")){
                    return "error";
                }
                else{
                    String newNum=dealEquation(num1,num2,operator);
                    s3.push(newNum);
                }
            }
        }
        if(!s3.empty()){
            return(s3.pop());
        }
        else{
            return null;
        }
    }

    private static String dealEquation(String num1,String num2,String operator){
        switch (operator){
            case "+":return String.valueOf(new BigDecimal(num2).add(new BigDecimal(num1)));
            case "-":return String.valueOf(new BigDecimal(num2).subtract(new BigDecimal(num1)));
            case "×":return String.valueOf(new BigDecimal(num2).multiply(new BigDecimal(num1)));
            case "÷":{
                DecimalFormat df = new DecimalFormat("#.#########");
                String cn = df.format((new BigDecimal(num2).divide(new BigDecimal(num1),10,BigDecimal.ROUND_HALF_UP)));
                return cn;
            }

            default:return "0";
        }
    }

上面的代码中有带小数点的大数的计算,计算的过程就为我们省了很多麻烦,我觉得这就是java比C语言强大的地方,它的库很多,能够让我们方便的使用。

以上就是我的计算器的代码,不足之处还有很多,我只是解决了简单的基础计算,在测试程序时崩溃又重改的过程虽然麻烦但是学到了很多东西。

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值