标签:
设计思路
1.题目避免重复
产生随机数组成算式,将算式转化成string类型放入数组中,int i=0;i++;继续产生算式,与数组中的算式比较,有相同的不插入数组中,无相同的插入数组中,i+1,当i=要求的题目数量时,停止产生式子。
2.可定制
输入要求题目的数量和输出时每行输出几道题。
3.可以控制下列参数
3.1是否有乘除法
可以用生成随机数的范围来控制(用函数封装)
3.2是否有括号(最多可以支持十个参数参与与计算)
用随机数确定是否产生括号,如果产生括号就将已经产生的式子括起来,为避免括号都在左边,向式子中添加新的数字和运算符号时要随机从左边加或从右边加。
3.3数值范围
可以乘以相应的数控制范围
3.4加减有无负数
有负数时用随机数来确定生成的数是否为负数,无负数时,要注意被减数一定要比 减数大。
3.5除法有无余数
产生随机数组成算式后取余判断是否有余数。
程序源代码:
import java.util.Scanner; public class Arithmetic { public static void main(String[] args) { // TODO Auto-generated method stub System.out.println("请输入题目的数量:"); Scanner sc1 = new Scanner(System.in); int quantity = sc1.nextInt(); System.out.println("请输入每行输出几道题目:"); Scanner sc2 = new Scanner(System.in); int num = sc2.nextInt(); int size=quantity; String[]suanshizu=new String[size]; equation(quantity,suanshizu); output(suanshizu,num,quantity); } static void equation(int quantity,String a[]) { System.out.println("请输入数值范围的最大值:"); Scanner sc1 = new Scanner(System.in); int max = sc1.nextInt(); System.out.println("请输入数值范围的最小值:"); Scanner sc2 = new Scanner(System.in); int min = sc2.nextInt(); System.out.println("请选择是否有负数(是:1 否:0)"); Scanner sc3 = new Scanner(System.in); int x = sc3.nextInt(); int iffu=x; System.out.println("请选择是否有分数(是:1 否:0)"); Scanner sc4 = new Scanner(System.in); int y = sc4.nextInt(); int iffen=y; System.out.println("请选择是否有乘除法(是:1 否:0)"); Scanner sc5 = new Scanner(System.in); int z = sc5.nextInt(); int ifcheng=z; System.out.println("请选择除法是否有余数(是:1 否:0)"); Scanner sc6 = new Scanner(System.in); int ifyu = sc6.nextInt(); for(int i=0;i<quantity;) { String suanshi; int c=1+(int)(Math.random()*7); suanshi=randomNumber(max,min,iffu,iffen); for(int t=0;t<c;t++) { if(x==1) iffu=(int)(Math.random()*2); if(y==1) iffen=(int)(Math.random()*2); if(z==1) ifcheng=(int)(Math.random()*2); int n0=(int)(Math.random()*2); if(n0==0) { suanshi=suanshi+randoSymbol(ifcheng,max,ifyu); suanshi=suanshi+randomNumber(max,min,iffu,iffen); } if(n0==1) { suanshi=randoSymbol(ifcheng,max,ifyu)+suanshi; suanshi=randomNumber(max,min,iffu,iffen)+suanshi; } int n=(int)(Math.random()*3); if(n==2) {suanshi=‘[‘+suanshi+‘]‘;} } i=i+ti(a,suanshi,i); } } static String randomNumber(int max,int min,int iffu,int iffen) { String number; if(iffen==0) { int a=(int)(Math.random()*max); number=String.valueOf(a); } else { int a=(int)(Math.random()*max); int b=(int)(Math.random()*max); if(b<a) { int t=b; b=a; a=t; } for(int i=a;i>1;i--) { if(a%i==0&&b%i==0) { a=a/i; b=b/i; } } number=‘(‘+String.valueOf(a)+‘/‘+String.valueOf(b)+‘)‘; } if(iffu==1) number=‘(‘+"-"+number+‘)‘; return number; } static String randoSymbol(int ifcheng,int max,int ifyu) { String symbol; int a=1+(int)(Math.random()*4); symbol=String.valueOf(a); if(ifcheng==0) { if(a==1||a==2) { char s=‘+‘; symbol=String.valueOf(s); } if(a==3||a==4) { char s=‘-‘; symbol=String.valueOf(s); } } if(ifcheng==1) { if(a==1) { char s=‘+‘; symbol=String.valueOf(s); } if(a==2) { char s=‘-‘; symbol=String.valueOf(s); } if(a==3) { char s=‘ב; symbol=String.valueOf(s); } if(a==4) { int number1,number2; char s=‘÷‘; symbol=String.valueOf(s); if(ifyu==0) {for(;;) { number1=1+(int)(Math.random()*max); number2=2+(int)(Math.random()*max); if(number1%number2==0) break; } String num1=String.valueOf(number1); String num2=String.valueOf(number2); symbol=randoSymbol(0,max,ifyu)+num1+symbol+num2+randoSymbol(0,max,ifyu); } } } return symbol; } static void output(String a[],int num,int quantity) { for(int i=0;i<quantity;i++) { if((i+1)%num==0) System.out.println(a[i]+‘=‘); else System.out.print(a[i]+‘=‘+‘\t‘+‘\t‘); } } static int ti(String a[],String v,int i) { int j; if(i!=0) { for(j=0;j<i;j++) { if(a[j]==v) { break; } } if(j==i) { a[i]=v; return 1; } else return 0; } else { a[0]=v; return 1; } } }
运行结果截图
程序分析:
因为老师要求在个人作业01的基础上进行编译,结果我发现我的01程序无法进行迭代,这是很严重的一个错误,在我写01程序时完全没有想到之后如果添加功能要怎么添加,这既是我没有经验也是我贪图容易走捷径,其实在写01程序时想过要用函数实现,但最后并没有,以后要注意这个问题,还有就是编程之前,设计思路一定要想好,想清晰,不然真的会为以后的编程任务带来很大的麻烦。另外,相对于我比较熟悉的C++而言,java有很多小的细节与之不同,本来我看到题目时首先想到的是树,但因为java没有指针不得不换成了动态数组。
周活动总结表
姓名:张雪晴 日期:3.19.2016
日期 任务 |
听课 |
编写程序 |
阅读课本 |
准备考试 |
|
|
日总计 |
周日 |
|
|
|
|
|
|
0 |
周一 |
100 |
|
20 |
|
|
|
120 |
周二 |
|
|
|
|
|
|
0 |
周三 |
|
180 |
|
|
|
|
180 |
周四 |
|
|
|
|
|
|
0 |
周五 |
|
|
35 |
|
|
|
35 |
周六 |
|
200 |
10 |
|
|
|
210 |
周总计 |
100 |
380 |
75 |
|
|
|
545 |
时间记录日志
学生:张雪晴 日期:3.14.2016
教师:王建民 课程:PSP
日期 |
开始时间 |
结束时间 |
中断时间 |
净时间 |
活动 |
备注 |
C |
U |
3/14 |
9:35 |
9:50 |
|
15 |
设计思路 |
课堂 |
√ |
|
|
pm8:00 |
pm9:00 |
10 |
50 |
小组讨论设计思路 |
讨论跑题10分钟 |
√ |
|
3/15 |
pm3:15 |
pm3:50 |
0 |
35 |
书写设计思路 |
|
√ |
|
3/16 |
pm4:50 |
pm8:30 |
40 |
180 |
编写程序 |
休息,吃饭,玩手机 |
√ |
|
3/18 |
pm1:00 |
pm1:35 |
0 |
35 |
看书 |
|
√ |
|
3/19 |
am8:50 |
am11:30 |
0 |
200 |
编写程序 |
|
√ |
|
|
am12:30 |
pm1:10 |
|
40 |
看书,写读书笔记 |
|
√ |
|
|
|
|
|
|
|
|
|
学生:张雪晴
日期:16.3.19
教员:王建民
程序号:1
日期 |
编号 |
类型 |
引入阶段 |
排除阶段 |
修复时间 |
修复缺陷 |
||||||
3/16 |
1 |
|
编码 |
编译 |
10min |
|
||||||
|
描述:提示输入语句写错了,导致输入的数据不符合要求程序报错 |
|||||||||||
|
2 |
|
编码 |
编译 |
5min |
|
||||||
|
描述:输出时数组越界 |
|||||||||||
|
3 |
|
编码 |
编译 |
7min |
|
||||||
|
描述:程序不能调用动态的方法(来自百度) |
|||||||||||
|
4 |
|
编码 |
编译 |
5min |
|
||||||
|
描述:函数的返回值不能为不确定的变量 |
|||||||||||
3/19 |
5 |
|
编码 |
编译 |
20min |
|
||||||
|
描述:在java中函数的地址传递与c++不同,上网查了一下。 |
|||||||||||
|
6 |
|
编码 |
编译 |
1min |
|
||||||
|
描述:输出的算式没有“=” |
|||||||||||
|
7 |
|
编码 |
编译 |
2min |
|
||||||
|
描述:String类型不能直接等于char类型的变量,要进行类型转换 |
标签:
原文地址:http://www.cnblogs.com/1443188449qq/p/5295245.html