zoukankan      html  css  js  c++  java
  • java 自动生成四则运算式

    本篇文章将要介绍一个“自动生成四则运算式”的java程序,在没有阅读《构建之法》之前,我已经通过一个类的形式实现了要求的功能,但是当阅读完成《构建之法》之后,我意识到自己所写程序的缺点,扩展性差。我通过组合模式对程序进行了修改,解耦合。
    可以关注公众号 HarLearn ,回复“ 自动生成四则运算式 ”,获取单类实现的源代码

    1. 需求分析

    自动生成10道100以内的2个操作数的四则运算算式(+ - * /),要求运算结果也在100以内,把运算式存入“result.txt”文件中。题目数量、数字范围、操作数和运算规则是可控的。

    2. 功能分析

    2.1 基础功能

      题目数量可设置

      可定制操作数

      可设置数字的范围

      可选择是否含有乘除

    2.2 扩展功能

      可设置计算机结果的范围

      可以扩展其他运算符

      可以生成带括号的运算式

    3. 设计实现

    3.1 类图

    类图设计
    类图设计

    3.2 关键方法

    生成运算式函数

    private String generateArithmetic(Arithmetic arithmetic{
            boolean isBracket = true;
            String arithmatic = RandomNumber.getRandomNumber(arithmetic.getNumberRange(),arithmetic.isNagetive());
            for(int i = 1; i < arithmetic.getNumberOpera(); i++){
                ArithmeticComponent operator = operators.get(Integer.parseInt(RandomNumber.getRandomNumber(operators.size(),false))-1);
                if (operator.isBracket()&&isBracket){
                    arithmatic = operator.generateArithmetic(arithmatic);
                    isBracket = false;
                    i--;
                }else if (!operator.isBracket()){
                    arithmatic = operator.generateArithmetic(arithmatic) + RandomNumber.getRandomNumber(arithmetic.getNumberRange(),arithmetic.isNagetive());
                    isBracket = true;
                }
            }
            return arithmatic;
        }

    生成随机数方法

    public static String getRandomNumber(int numberRange, boolean isNagetive){
            Random randomNum = new Random();
            String randomNumber = "";
            if (isNagetive){
                int number = (randomNum.nextInt(numberRange) +1) * (Math.random() > 0.5 ? -1 : 1);
                if (number < 0){
                    randomNumber = "(" + number + ")";
                }else{
                    randomNumber = number+"";
                }
                return randomNumber;
            }else{
                return randomNum.nextInt(numberRange) +1 +"";
            }
        }

    运行测试

    基础功能测试

    基础功能测试
    基础功能测试

    扩展测试

    生成带括号的测试
    生成带括号的测试

    总结

    通过本篇文章学习了很多,发现了自己在软件开发中的一些不足,考虑问题的欠缺。希望通过课程的系统的学习,使自己的能力提高。

    PSP

    PSP
    PSP
  • 相关阅读:
    JAVA中重写equals()方法为什么要重写hashcode()方法说明
    深入浅出UML类图
    UML解惑:图说UML中的六大关系
    maven自动打包上传nexus仓库配置
    vi查找替换命令详解
    Maven运行JUnit测试(http://www.360doc.com/content/13/0927/15/7304817_317455642.shtml)
    Maven 排除依赖jar包
    2、【Spark】Spark环境搭建(集群方式)
    1、【Spark】Spark安装
    Centos7 执行firewall-cmd –permanent –add-service=mysql报错“ModuleNotFoundError: No module named 'gi'”
  • 原文地址:https://www.cnblogs.com/CrazyIdeas/p/11492908.html
Copyright © 2011-2022 走看看