一个简单的四则运算程序(优化)

首先是大概的思路:
1.生成一个2到4的随机数,来确定计算式中的数字个数
2.确定好计算数的随机数
3.随机产生计算符号
4.组合 生成一个算数式 显示
5.计算结果

1.生成一个2到4的随机数,来确定计算式中的数字个数

Random random = new Random();
int a = random.nextInt(3)+2;

2.确定好计算数的随机数

由于多次生成随机数,此处生成一个方法:

public int getInt(int i){
        int num = random.nextInt(i);
        return num;
    }

生成随机数:

num1 = getInt(100)+1;
num2 = getInt(100)+1;
num3 = getInt(100)+1;
num4 = getInt(100)+1;

3.随机产生计算符号

 public char getSy(){
        int a = getInt(4);
        switch (a){
            case 0:
                return '+';
            case 1:
                return '-';
            case 2:
                return '×';
            case 3:
                return '÷';
        }
        return ' ';
    }

4.组合 生成一个算数式 显示

public void show(){
        StringBuilder builder = new StringBuilder();
        int a = random.nextInt(3)+2;
        int num1,num2,num3,num4;
        char sy1,sy2,sy3;
        switch (a){
            case 2:
                num1 = getInt(100)+1;
                num2 = getInt(100)+1;
                sy1 = getSy();
                builder.append(num1).append(sy1).append(num2);
                s = builder.toString();
                break;
            case 3:
                num1 = getInt(100)+1;
                num2 = getInt(100)+1;
                num3 = getInt(100)+1;
                sy1 = getSy();
                sy2 = getSy();
                builder.append(num1).append(sy1).append(num2).append(sy2).append(num3);
                s = builder.toString();
                break;
            case 4:
                num1 = getInt(100)+1;
                num2 = getInt(100)+1;
                num3 = getInt(100)+1;
                num4 = getInt(100)+1;
                sy1 = getSy();
                sy2 = getSy();
                sy3 = getSy();
                builder.append(num1).append(sy1).append(num2).append(sy2).append(num3).append(sy3).append(num4);
                s = builder.toString();
                break;
        }
        textView_show.setText(s + "=?");

    }

5.计算结果

计算逻辑:将得到的算术式进行分解,利用对算术式按计算符号分解的先后顺序,实现乘除的计算优先级。通过递归的方式实现。

 public float cal(String s1){
        int a1  = s1.indexOf('+');
        int a2  = s1.indexOf('-');
        int a3  = s1.indexOf('×');
        int a4  = s1.indexOf('÷');

        if(a1 != -1){
            return  cal(s1.substring(0,a1)) + cal(s1.substring(a1+1,s1.length()));
        }
        if(a2 != -1){
            
           if(t > 0){
                return  cal(s1.substring(0,a2)) + cal(s1.substring(a2+1,s1.length()));
                }            
            return  cal(s1.substring(0,a2)) - cal(s1.substring(a2+1,s1.length()));
            t++;
        }
        if(a3 != -1){
            return  cal(s1.substring(0,a3)) * cal(s1.substring(a3+1,s1.length()));
        }
        if(a4 != -1){
            return  cal(s1.substring(0,a4)) / cal(s.substring(a4+1,s1.length()));
        }
        return Float.parseFloat(s1);
    }

限制结果为小数点后两位:

public void answer(View view){
        float result = cal(s);
        BigDecimal b = new BigDecimal(result);
        float f1 = b.setScale(2,BigDecimal.ROUND_HALF_UP).floatValue();
        textView_answer.setText(s+"="+f1);
    }
原文地址:https://www.cnblogs.com/Zyhzy4/p/6550411.html