本篇文章将要介绍一个“自动生成四则运算式”的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
原文地址:https://www.cnblogs.com/CrazyIdeas/p/11492908.html
时间: 2024-10-11 22:11:26