使用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项目地址:

https://github.com/dushik/Athmetic

需求分析:

  • 通过程序接受一个数字,产生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实现随机四则运算的更多相关文章

  1. 300道随机四则运算小程序(java编写)

    这是由Java编写的300道随机四则运算小程序, 运算数范围为0~100(不包括100),运算结果保留两位小数. 程序代码: import java.util.*; class Yunsuan{ pu ...

  2. 20175305张天钰Java结对编程四则运算

    Java结对编程四则运算 一.题目描述:如何对表达式进行求值运算呢 1.中缀表达式与后缀表达式(娄老师讲解) 中缀表达式就是运算符号在运算数中间的表达式,比如1+2,顾名思义,后缀表达式就是运算符在运 ...

  3. Java结对编程四则运算一周小结

    Java结对编程四则运算一周小结 需求分析 对于四则运算来说最主要的就是要计算出产生的式子(字符串的形式). 设计思路 总体可将这个项目分解为几个部分:产生式子,计算式子,判断对错并记录: 具体的思路 ...

  4. java list随机打乱

    java list随机打乱package arrlist; import java.util.ArrayList; import java.util.Collections; import java. ...

  5. 随机四则运算 C语言

    设计思想:出三十道一百以内数的随机四则运算题目,先随机两个一百以内的数字,再通过随机数确定四则运算算符,最后通过for循环输出三十道 源代码程序: #include <stdlib.h># ...

  6. java生成随机序列号

    1.java生成随机序列号 String deleteUuid = UUID.randomUUID().toString(); 引用Jar包 //java-uuid-generator-3.1.3.j ...

  7. java生成随机字符串

    学习java comparable特性时候,定义如下Student类,需要需要随机添加学生姓名以及学号和成绩,这是java如何随机生成名字,根据我的查询,我找到目前java库支持两种方法. 1. or ...

  8. 20175305张天钰Java结对编程四则运算(二)

    Java结对编程四则运算(二) 一.题目描述及要求 Git提交粒度不要太粗,建议一个文件/一个类/一个函数/一个功能/一个bug修复都进行提交,不能一天提交一次,更不能一周一次,参考Commit Me ...

  9. 随机四则运算的出题程序java

    一.设计思想 1.功能较多必须有菜单选择项,将一个大程序分为若干个功能模块的小程序,逐个实现2.针对题目避免重复时先将已生成的算式保存,然后将下一条生成的式子进行判断是否已生成,如果生成则返回循环语句 ...

随机推荐

  1. C#设计模式之六适配器模式(Adapter Pattern)【结构型】

    一.引言 从今天开始我们开始讲[结构型]设计模式,[结构型]设计模式有如下几种:适配器模式.桥接模式.装饰模式.组合模式.外观模式.享元模式.代理模式.[创建型]的设计模式解决的是对象创建的问题,那[ ...

  2. vim编辑器的设置

    1.vim编辑器设置分为两种设置,临时设置和永久设置 2.临时设置开启和关闭高亮模式(目前高亮模式是开启的) etc/ man.config vim man.config 在文本编辑器中命令行模式下输 ...

  3. Linux下Python安装完成后如何使用pip命令

    一.很多读者Python安装完成之后,想要下载相关的包,例如:numpy.pandas等Python中这些基础的包,但是,发现pip根本用不了,主要表现在一下几种情况: 二.出现这种情况其实并不意外, ...

  4. python之把字符串形式的函数编译执行

    实现效果:执行字符串形式的函数 代码如下 # name = 'aaa' # data = [18,32,33] # def hellocute(): # return "name %s ,a ...

  5. es6 语法 (let 和const)

    一.let 和const 1.let 只在自己声明的块作用域中有效: function test(){ let a = 'a'; var b = 'b'; for(let i =1;i<3;i+ ...

  6. 照葫芦画瓢系列之Java --- eclipse下使用maven创建Struts 2项目

    一.创建Maven项目 http://www.cnblogs.com/zhanqun/p/8425571.html 二.添加struts2核心依赖包以及其他依赖项 打开pom.xm配置界面 点击Add ...

  7. 20.Odoo产品分析 (三) – 人力资源板块(1) – 员工目录(1)

    查看Odoo产品分析系列--目录 人力资源指在一个国家或地区中,处于劳动年龄.未到劳动年龄和超过劳动年龄但具有劳动能力的人口之和.狭义讲就是企事业单位独立的经营团体所需人员具备的能力(资源).(解释来 ...

  8. 微信小程序开发之初探

    本文是以一个简单的小例子,来简要讲解微信小程序开发步骤,希望促进学习分享. 概念 微信小程序,简称小程序,缩写xcx,英文mini program.是一种不需要下载安装即可使用的应用,它实现了应用“触 ...

  9. vue 构建项目遇到的请求本地json问题

    在本地测试的json没有问题,但是打包后,发现json 的路径不对了,变成了绝对路径 解决方法: 建立的json文件需要放置  根目录/static下.如项目名/static/data.json,这边 ...

  10. git 入门教程之初识git

    初识 git git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目. 背景 我们都知道,Linus 在1991年创建了开源的linux系统,随着不断发展壮大,目前已发展成为最大 ...