java中1%4是多少,四则运算(java) 王哲文 邹庭和
一、题目:实现一个自动生成小学四则运算题目的命令行程序
功能:
1. 使用 -n 参数控制生成题目的个数,例如
Myapp.exe -n 10,将生成10个题目。【已实现】
2. 使用 -r 参数控制题目中数值(自然数、真分数和真分数分母)的范围,例如
Myapp.exe -r 10,将生成10以内(不包括10)的四则运算题目。该参数可以设置为1或其他自然数。该参数必须给定,否则程序报错并给出帮助信息。【已实现】
3. 生成的题目中计算过程不能产生负数,也就是说算术表达式中如果存在形如e1 − e2的子表达式,那么e1 ≥ e2。【减法未实现】
4. 生成的题目中如果存在形如e1 ÷ e2的子表达式,那么其结果应是真分数。【已实现】
5.每道题目中出现的运算符个数不超过3个。【已实现】
6. 程序一次运行生成的题目不能重复,即任何两道题目不能通过有限次交换+和×左右的算术表达式变换为同一道题目。
生成的题目存入执行程序的当前目录下的Exercises.txt文件,格式如下:
1. 四则运算题目1
2. 四则运算题目2
……
其中真分数在输入输出时采用如下格式,真分数五分之三表示为3/5,真分数二又八分之三表示为2’3/8。【检测重复部分未实现】
7. 在生成题目的同时,计算出所有题目的答案,并存入执行程序的当前目录下的Answers.txt文件,格式如下:
1. 答案1
2. 答案2
特别的,真分数的运算如下例所示:1/6 + 1/8 = 7/24。【已实现】
8. 程序应能支持一万道题目的生成。【已实现】
9. 程序支持对给定的题目文件和答案文件,判定答案中的对错并进行数量统计。【未实现】
二、设计实现
1. 数值生成
题目要求生成的数要带上分数,设计方面是通过随机产生分子和分母的整数值两数相除,然后进行有关分数方面的操作,例如约分,假分数化为带分数和分数之间运算等操作,最后转化为字符输出。这些方法用一个分数类Fraction()来保存。
2. 算术表达式生成
题目要求不超过三个运算符,所设计时则通过生成一个随机数,然后进行循环随机数运算,通过另生成一个随机数进行switch选择生成随机运算符且再生成一个随机数控制运算符个数随机,每次循环用字符保存,从而循环生成一个字符算式,再用一个字符数组循环保存每个算式,最后再进行输出。其中,用num、max分别控制生成的算式题目数及数值范围,以达到控制题目目的。
三、用户使用说明
举例:
-n [数值] 使用 -n 参数控制生成题目的个数。
-r [数值] 使用 -r 参数控制题目中数值(自然数、真分数和真分数分母)的范围。
四、关键代码
1. 分数生成
1 packagearithmetic;2 /**
3 *4 *@authorAdministrator5 */
6
7 public classFraction {8 private int a; //分子
9 private int b; //分母
10
11 publicFraction(String string) {12 string =string.trim();13 int char1 = string.indexOf("'");14 int char2 = string.indexOf("/");15 if (char1 != -1) { //数字为带分数
16 int z = Integer.valueOf(string.substring(0, char1));17 b = Integer.valueOf(string.substring(char2 + 1));18 a = z * b + Integer.valueOf(string.substring(char1 + 1, d));19 } else if (char2 != -1) { //数字为真分数
20 b = Integer.valueOf(string.substring(char2 + 1));21 a = Integer.valueOf(string.substring(0,char2));22 } else { //数字为整数
23 a =Integer.valueOf(string);24 b = 1;25 }26 build(a, b);27 }28 public Fraction(int a, intb) {29 build(a, b);30 }31
32 //数字形式转换为字符串形式
33 publicString toString() {34 if (b == 1) {35 returnString.valueOf(a);36 } else{37 int i = a /b;38 if (i != 0) {39 return String.format("%d'%d/%d", i, a - b *i, b);40 } else{41 return String.format("%d/%d", a, b);42 }43 }44 }45
46 //给定分子分母构造分数
47 private void build(int a, intb) {48 if (b == 0) {49 throw new RuntimeException("分母不能为0");50 }51 int c =comfactor(a, b);52 this.a = a /c;53 this.b = b /c;54 }55
56 //公约数
57 private int comfactor(int a, intb) {58 int mod = a %b;59 return mod == 0 ?b : comfactor(b, mod);60 }61
62 //a + b
63 publicFraction add(Fraction fraction) {64 return new Fraction(this.a * fraction.b + fraction.a * this.b, this.b *fraction.b);65 }66
67 //a - b
68 publicFraction subtraction(Fraction fraction) {69 return new Fraction(this.a * fraction.b - fraction.a * this.b, this.b *fraction.b);70 }71
72 //= a x b
73 publicFraction multiplication(Fraction fraction) {74 return new Fraction(this.a * fraction.a, this.b *fraction.b);75 }76
77 //a/b
78 publicFraction division(Fraction fraction) {79 return new Fraction(this.a * fraction.b, b *fraction.a);80 }81
82 public doublegetDouble() {83 return a /b;84 }85
86 }
2. 表达式生成及计算(仅显示带分数部分)
1 packagearithmetic;2
3 importjava.util.Random;4
5 importjavax.script.ScriptEngine;6 importjavax.script.ScriptEngineManager;7 importjavax.script.ScriptException;8
9
10 //带真分数四则运算
11 public classcreateQuestion1 {12 public voidtestQuestion(String num,String max) {13 fileUnit fileunit=newfileUnit();14 int num1=Integer.parseInt(num);15 int max1=Integer.parseInt(max);16 String result=null;17 String operator1=null;18 String txt=null;19 String txt1=null;20 intoperator,operatorNum;21 //int[] a=new int[10000];
22 Fraction [] arr=new Fraction[10000];23 Fraction [] arr1=new Fraction[4];24 String [] Result = new String [10000];25 System.out.println("生成的带真分数四则运算试题为:");26
27 for(int j=1;j<=num1;j++) {28 //a[0]=(int)(Math.random()*max1);29 //result=a[0]+"";
30 result=null;31 Random c = newRandom();32 Random d = newRandom();33 Fraction e = new Fraction(c.nextInt(max1)+1,d.nextInt(max1)+1);34 arr1[0]=e;35 operatorNum=(int)(Math.random()*max1%4);36 while(operatorNum==0) {37 operatorNum=(int)(Math.random()*max1%4);38 }39 for(int i=1;i
42 Fraction b = new Fraction(c.nextInt(max1)+1,d.nextInt(max1)+1);43 operator=(int)(Math.random()*max1%4);44 switch(operator) {45 case 0:operator1="+";arr1[i]=arr1[i-1].add(b);break;46 case 1:operator1="-";arr1[i]=arr1[i-1].subtraction(b);break;47 case 2:operator1="*";arr1[i]=arr1[i-1].multiplication(b);break;48 case 3:operator1="/";arr1[i]=arr1[i-1].division(b);break;49 }50 if(i==1) {51 result="("+e+")"+operator1+"("+b+")"+"";52 }53 else{54 result="("+result+")"+operator1+"("+b+")"+"";55 }56 }57 arr[j]=arr1[operatorNum];58 System.out.println("题目"+j+":"+"result="+result);59 if(txt==null) {60 txt="result="+result+"\n";61 }62 else{63 txt=txt+"result="+result+"\n";64 }65 Result[j]=arr[j]+"";66 if(txt1==null) {67 txt1="result="+Result[j]+"\n";68 }69 else{70 txt1=txt1+"result="+Result[j]+"\n";71 }72 } //下面注释部分因为没有考虑优先级而出现错误,未实现。73 /*
74 ScriptEngineManager manager = new ScriptEngineManager();75 ScriptEngine engine = manager.getEngineByName("js");//可以通过这个来调用JS模块的函数76 for(int k=1;k<=num1;k++) {77 Object result2;78 try {79 result2 = engine.eval(Result[k]);80 if(txt1==null) {81 txt1="result="+result2+"\n";82 }83 else {84 txt1=txt1+"result="+result2+"\n";85 }86
87 } catch (ScriptException e) {88 // TODO Auto-generated catch block89 e.printStackTrace();90 }91 }92 */
93 String fileName="c:\\Exercises.txt";94 System.out.println("练习题目已生成,存储路径为:"+fileName);95 fileunit.WriteTextFile(fileName,"题目"+"\n");96 fileunit.WriteTextFile(fileName, txt);97 String fileName1="c:\\Answers.txt";98 System.out.println("练习题目答案已生成,存储路径为:"+fileName1);99 fileunit.WriteTextFile(fileName1,"答案"+"\n");100 fileunit.WriteTextFile(fileName1, txt1);101
102 }103 }
五、测试运行结果截图
结果出来的时候有些bug,上面有说明。
五、PSP
PSP2.1
Personal Software Process Stages
预估耗时(分钟)
实际耗时(分钟)
Planning
计划
35
45
· Estimate
· 估计这个任务需要多少时间
35
45
Development
开发
930
1290
· Analysis
· 需求分析 (包括学习新技术)
70
120
· Design Spec
· 生成设计文档
25
25
· Design Review
· 设计复审 (和同事审核设计文档)
40
80
· Coding Standard
· 代码规范 (为目前的开发制定合适的规范)
25
25
· Design
· 具体设计
70
110
· Coding
· 具体编码
600
780
· Code Review
· 代码复审
50
50
· Test
· 测试(自我测试,修改代码,提交修改)
50
100
Reporting
报告
90
90
· Test Report
· 测试报告
25
25
· Size Measurement
· 计算工作量
15
15
· Postmortem & Process Improvement Plan
· 事后总结, 并提出过程改进计划
50
50
合计
1055
1425
六、经验小结
这次四则运算作业做的并不成功,基本功能部分已实现,有些关键部分没有实现。主要原因是没有做好充分的准备和思考不够周到。在计算结果的时候直接用循环去做,导致了没有考虑运算符号的优先级,直接从左往右进行运算,所以得出了错误的结果。检测出错误之后,虽然考虑到了用栈的方式去计算结果,但是因为要花费很长时间研究而且没有充分准备,所以没时间修改。
邹庭和主要负责算数表达式的生成和计算,我主要负责数值中分数的设定和生成,通过这次编程我体会到了这次的编程要用到以前学的知识,例如数据结构,数据结构主要内容是关于数据的不同存储方式,应用很广泛。这次因为最后才想到数据结构的栈,导致准备并不充分,最后结果出现了错误。
经过反思之后,我们意识到“never stop coding”的重要性,平常代码还是要练的,以前的知识还是要回顾一下的,希望在以后的编程中能再提高自己。
java中1%4是多少,四则运算(java) 王哲文 邹庭和相关推荐
- java中常量有初始化值吗,java的变量和常量
Java常用变量: Java标识符: 使用标识符时,需要遵守几条规则: 1. 标识符可以由字母.数字.下划线(_).美元符($)组成,但不能包罗 @.%.空格等其它特殊字符,不能以数字开头.譬如:1 ...
- Java中的Volatile如何工作? Java中的volatile关键字示例
如何在Java中使用Volatile关键字 在Java采访中,什么是volatile变量以及何时在Java中使用volatile变量是Java 采访中一个著名的多线程采访问题 . 尽管许多程序员都知道 ...
- java 中的排序_浅谈java中常见的排序
浅谈java中常见的排序 学过java的人都知道,排序这一部分初次接触感觉还是有点难以理解,很多地方也会用到.然而,在java中常见的排序方法:冒泡排序,选择排序,插入排序等等.下面就让我们一起揭开他 ...
- java 中的单元测试_浅谈Java 中的单元测试
单元测试编写 Junit 单元测试框架 对于Java语言而言,其单元测试框架,有Junit和TestNG这两种, 下面是一个典型的JUnit测试类的结构 package com.example.dem ...
- java中next的用法_关于java iterator的next()方法的用法
UYOU next()是java迭代器类(Iterator)的方法,获得当前游标指向的下一个元素,详细说明和应用如下:1.迭代器(Iterator)介绍 迭代器是一种设计模式,它是一个对象,它可以遍历 ...
- java中引用类型_您真的了解Java中的4种引用类型吗?
Java中提供了四个级别的引用:SoftReference,FinalReference,WeakReference和PhantomReference.在四种引用类型中,只有FinalReferenc ...
- java中怎样判断余数为3,Java的基础语法(三): 运算符
7.运算符 定义: 对常量和变量进行操做的符号spa 分类: 6大类---算术, 赋值, 比较, 逻辑, 位, 三元code (1).算术运算符blog +, -, *, / ,%, ++, --字符 ...
- java中打开文件显示_从java程序中打开任何文件
在 java中打开文件似乎有点棘手 – 对于.txt文件,必须将File对象与Scanner或BufferedReader对象结合使用 – 对于图像IO,必须使用 ImageIcon类 – 如果要打开 ...
- java中布局管理器flowlayout,在Java中下列()方法可以把JFrame的布局管理器设为FlowLayout类型。...
在Java中下列()方法可以把JFrame的布局管理器设为FlowLayout类型. 答:jFrame.setLayout(new FlowLayout() ) 在Word 2010的编辑状态,当前编 ...
最新文章
- Python 生产者与消费者(一)
- 【Prometheus】prometheus生成快照,并冷备份数据,恢复数据
- BI和大数据你能分清吗?
- 冲击SuperGLUE:基于多任务与对抗训练的Finetune方案解析
- linux目录操作函数
- tcpdump命令速查
- python安装详细步骤mac_mac如何安装python3
- 敏捷开发中“可运行软件”的评审标准(兼谈敏捷开发中的迭代中期质量控制)...
- 剑指offer面试题58 - II. 左旋转字符串(切片)(一行代码)
- 电脑位数怎么看_怎么用电脑播放4K视频?怎么用电脑看4K电影? 附带详细教程...
- html倾斜变形,深入理解CSS变形transform(2d)_html/css_WEB-ITnose
- Java字符串常见面试题
- AES解码:BadPaddingException: pad block corrupted异常
- 分子动力学软件-VMD(win版)
- 我的职业生涯中所获取的职业技能证书
- 2010年IT10大好书榜(上半年刊)——国外引进篇
- 网易我的世界java怎么开光追_《我的世界》如何开启光线追踪?
- dbd mysql 4.046安装_perl DBI、DBD-mysql、DBD-Oracle安装
- 12个有效的域名工具及其生成器
- 线性代数(9)——初等矩阵和矩阵可逆性(上)
热门文章
- 20169210 2016-2017-2《网络攻防实践》第五周作业
- sql 获取第10到20个记录
- 好看的php表格样式,CSS_CSS实现的清爽、漂亮的表格样式分享,效果:
实现代码:复制代码 - phpStudy...
- python开发人员看什么书_python初学者看什么书
- python简笔画程序_使用python turtle绘制简笔画大白
- Python中真的是能使用元组的地方尽量不使用列表吗?
- ubuntu 64 12.04 oracle,Ubuntu 12.04 (amd64)安装Oracle 11g 总结
- 织梦在哪写html,织梦dedecms模板文件不支持html的解决方法
- 计算机考研408的优势和劣势,21考研:杭州电子科技大学计算机改考408!透露2个信号,咋整?...
- python编写一个函数判断一个数是否为素数是则返回yes_编写函数isPrime,判断一个数字是否为素数,是则返回字符串 YES ,否则返回字符串 NO 。_学小易找答案...