zoukankan      html  css  js  c++  java
  • 一个简单的四则运算程序(优化)

    首先是大概的思路:
    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);
        }
    
  • 相关阅读:
    Markdown学习笔记
    带下划线点域名解析失败
    前端工程师学习之路
    Java 调用 WebService 客户端代码 含通过代理调用
    MySQL 日期函数 时间函数 总结 (MySQL 5_X)
    Apache、Tomcat整合环境搭建
    201671010142 <java程序设计>初次学习心得与感悟
    201671010142 Java基本程序设计结构学习的感悟
    201671010142.第五章的学习总结
    201671010142 继承定义与使用 感悟与总结
  • 原文地址:https://www.cnblogs.com/Zyhzy4/p/6550411.html
Copyright © 2011-2022 走看看