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


    首先是大概的思路:
    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);
        }
    
  • 相关阅读:
    ASP.NET存储过程自定义分页详解
    ajax php POST 提交例子
    一个用存储过程的基本分页及其调用
    DataGrid 存储过程的分页
    无刷新无限级菜单联动
    asp.net URL多参数傳值以及特殊符号传值问题
    ASP.NET页面间参数的传递
    Android动画开发——Animation动画效果
    android surface
    Android控件属性——android:cacheColorHint=“#00000000”
  • 原文地址:https://www.cnblogs.com/Zyhzy4/p/6550411.html
Copyright © 2020-2023  润新知