java实现随机四则运算
使用JAVA编程语言,独立完成一个包含3到5个数字的四则运算练习,软件基本功能要求如下:
- 程序可接收一个输入参数n,然后随机产生n道加减乘除练习题,每个数字在 0 和 100 之间,运算符在3个到5个之间。
 - 为了让小学生得到充分锻炼,每个练习题至少要包含2种运算符。同时,由于小学生没有分数与负数的概念,你所出的练习题在运算过程中不得出现负数与非整数,比如不能出 3/5+2=2.6,2-5+10=7等算式。
 - 练习题生成好后,将你的学号与生成的n道练习题及其对应的正确答案输出到文件“result.txt”中,不要输出额外信息,文件目录与程序目录一致。
 - 当程序接收的参数为4时,以下为输出文件示例。
 
2018010230
13+17-1=29
11*15-5=160
3+10+4=1
15/5+3-2=4
Github项目地址:
需求分析:
- 通过程序接受一个数字,产生N道加减乘除练习题。
 - 判断传入参数是否合法
 - 每个数字在0-100之间,运算符3-5个
 - 运算过程不能出现负数和非整数
 - 计算练习题
 - 所有信息输出到txt文件
 
功能设计:
- 编写主函数
 - 编写输入是否合法函数
 - 随机生成运算式
 - 编写计算运算式函数
 - 结果写入txt辅助类
 
设计实现:
- 编写主函数并通过命令行接收参数
 - 判断传入参数是否合法
 - 随机选择加减乘除运算符
 - 根据产生运算符的个数生成一定运算数的运算式并存入List集合
 - 当随机产生的运算符是“/”时,判断被除数是否能整除除数,如果不能,随机产生能够被整除的除数。
 - 遍历List集合通过函数计算集合中每个运算式的结果
 - 编写写入txt文件函数
 
测试运行:

核心代码:
随机产生num个运算式,并将产生的运算式存入List集合
char[] operator=new char[]{'+','-','*','/'};
Random random=new Random();
ArrayList<String> expression=new ArrayList<String>();
for(int i=0;i<num;i++){
	int n=random.nextInt(3)+3; //3-5个运算符
	int[] number=new int[n+1];
	String ex=new String();
	for(int j=0;j<=n;j++){
		number[j]=random.nextInt(100)+1; //4-5个数字
	}
	for(int j=0;j<n;j++){
		int s=random.nextInt(4);//随机选择某个运算符
		ex+=String.valueOf(number[j])+String.valueOf(operator[s]);///5+4+6+9
		if(s==3){number[j+1]=decide(number[j],number[j+1]);}
	}
	ex+=String.valueOf(number[n]);
	expression.add(ex);
}
当被除数不能整除除数时,随机生成能够整除的除数
/**
 * 随即取x,y为1-100之间,x可以整除y的y值
 * @param x
 * @param y
 * @return
 */
private static int decide(int x,int y){//通过递归实现整除
	Random random=new Random();
	if(x%y!=0){
		y=random.nextInt(100)+1;
		return decide(x,y);
	}
	else{
		return y;
	}
}
通过javascript的eval函数计算字符串内的运算式
/**
 * 计算每个等式的结果,并返回运算式
 * @param arrayList
 * @return arrayList
 */
static ScriptEngine jse = new ScriptEngineManager().getEngineByName("JavaScript");
private static ArrayList<String> calculate(ArrayList<String> arrayList){
	ArrayList<String> ArithExpress=new ArrayList<String>();
	for(String ax:arrayList){
		try {
			ax=ax+"="+jse.eval(ax);
			System.out.println(ax);
			ArithExpress.add(ax);
		} catch (ScriptException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	return ArithExpress;
}
总结:
本程序的主要难点在于运算式的随机生成和运算式的计算,后者借助于Javascript的eval函数通过求解字符串内的运算式得到解决,编程重点解决随机生成运算式部分
PSP:
| PSP | 任务内容 | 计划完成需要的时间(min) | 实际完成需要的时间(min) | 
|---|---|---|---|
| 计划 | 10 | 12 | |
| Estimate | 需求分析,函数实现 | 10 | 10 | 
| 开发 | 30 | 30 | |
| Analysis | 需求分析 | 5 | 10 | 
| Design Spec | 设计 | 5 | 5 | 
| Design Review | 设计复审 | 2 | 2 | 
| Design | 具体设计 | 5 | 5 | 
| Coding | 具体编码 | 20 | 20 | 
| Code Review | 代码复审,查找语法错误 | 2 | 2 | 
| Test | 测试 | 5 | 5 | 
| 报告 | 10 | 10 | |
| Test Report | 经测试,程序编译正确,运行结果正确,完全符合要求 | 2 | 2 | 
| Size Measurement | 由于程序功能较为简单,需求分析的工作量很小,故本次实验的主要工作主要在于编程 | 2 | 2 | 
| Postmortem | 对于此程序,计算部分还有大的改进空间,可以采用将中缀表达式转换为后缀表达式,通过正则判断运算符优先级来实现算式的结果,而不是另辟他法调用Javascript函数 | 2 | 2 | 
java实现随机四则运算的更多相关文章
- 300道随机四则运算小程序(java编写)
		
这是由Java编写的300道随机四则运算小程序, 运算数范围为0~100(不包括100),运算结果保留两位小数. 程序代码: import java.util.*; class Yunsuan{ pu ...
 - 20175305张天钰Java结对编程四则运算
		
Java结对编程四则运算 一.题目描述:如何对表达式进行求值运算呢 1.中缀表达式与后缀表达式(娄老师讲解) 中缀表达式就是运算符号在运算数中间的表达式,比如1+2,顾名思义,后缀表达式就是运算符在运 ...
 - Java结对编程四则运算一周小结
		
Java结对编程四则运算一周小结 需求分析 对于四则运算来说最主要的就是要计算出产生的式子(字符串的形式). 设计思路 总体可将这个项目分解为几个部分:产生式子,计算式子,判断对错并记录: 具体的思路 ...
 - java list随机打乱
		
java list随机打乱package arrlist; import java.util.ArrayList; import java.util.Collections; import java. ...
 - 随机四则运算 C语言
		
设计思想:出三十道一百以内数的随机四则运算题目,先随机两个一百以内的数字,再通过随机数确定四则运算算符,最后通过for循环输出三十道 源代码程序: #include <stdlib.h># ...
 - java生成随机序列号
		
1.java生成随机序列号 String deleteUuid = UUID.randomUUID().toString(); 引用Jar包 //java-uuid-generator-3.1.3.j ...
 - java生成随机字符串
		
学习java comparable特性时候,定义如下Student类,需要需要随机添加学生姓名以及学号和成绩,这是java如何随机生成名字,根据我的查询,我找到目前java库支持两种方法. 1. or ...
 - 20175305张天钰Java结对编程四则运算(二)
		
Java结对编程四则运算(二) 一.题目描述及要求 Git提交粒度不要太粗,建议一个文件/一个类/一个函数/一个功能/一个bug修复都进行提交,不能一天提交一次,更不能一周一次,参考Commit Me ...
 - 随机四则运算的出题程序java
		
一.设计思想 1.功能较多必须有菜单选择项,将一个大程序分为若干个功能模块的小程序,逐个实现2.针对题目避免重复时先将已生成的算式保存,然后将下一条生成的式子进行判断是否已生成,如果生成则返回循环语句 ...
 
随机推荐
- eclipse下svn的使用
			
描述:本篇用解决下面的案例中的问题来描述eclipse svn插件的使用. a.案例 某研发团队开发了一款名为App,目前已发布v1.0版本.此项目初期已有部分基础代码, 研发团队再此基础代码上经过3 ...
 - C#设计模式之十三模板方法模式(Template Method Pattern)【行为型】
			
一.引言 “结构型”的设计模式已经写完了,从今天我们开始讲“行为型”设计模式.现在我们开始讲[行为型]设计模式的第一个模式,该模式是[模板方法],英文名称是:Template Method Patte ...
 - laravel常见异常解决
			
requested URL not found http://stackoverflow.com/questions/21458080/the-requested-url-projectname-us ...
 - JAVA 多线程(2)
			
一.首先 Thread 是实现了Runable 接口的类 理论上Thread 实例与直接实现runable接口的实例运行起来没有什么不同,但是由于JAVA 是单继承,所以如果想再一个类中实现2个不同的 ...
 - 鼠标滑过侧边弹出内容(JS)
			
效果展示 实现原理 1. html结构: <div id="contain"> <span id="share">分享</span ...
 - CSS网页中导入特殊字体@font-face属性详解
			
@font-face是CSS3中的一个模块,他主要是把自己定义的Web字体嵌入到你的网页中. 语法规则 首先我们一起来看看@font-face的语法规则: @font-face { font-fami ...
 - JS检测浏览器Adobe Reader插件
			
Web应用中当我们希望向用户显示pdf文档时候,如果用户安装了Adobe Reader之类的pdf阅读器,就可以直接打开文档在浏览器中显示, 但是,当用户没有安装这类软件的时候,自然是打不开的,为了系 ...
 - 【代码笔记】Web-JavaScript-JavaScript字符串
			
一,效果图. 二,代码. <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...
 - Openlayer3中应用的技术
			
ol3-ext有很多很丰富的效果,可以不用重复造轮子,ol3-ext示例大全:http://viglino.github.io/ol3-ext/ 在本次项目中使用到了ol3-ext的两个功能:图层管理 ...
 - 小技巧:在线生成按钮Shape的网站
			
AndroidButton Make 右侧设置按钮的属性,可以即时看到效果,并即时生成对应的.xml 代码,非常高效(当然熟练的话 自己手写代码更快)