1.题目要求
-
能够自动生成四则运算练习题
-
可以定制题目数量
-
用户设置最大数(如十以内、百以内等)
-
用户选择是否有括号、是否有小数
-
用户选择输出方式(如输出到文件、打印机等)
-
最好能提供图形用户界面(根据自己能力选做,以完成上述功能为主)
2.成员定位
驾驶员(我)
-
能够完成全部代码工作,程序基本实现全部要求功能,并将代码上传至coding.net或者GitHub代码托管系统中(15分)
-
能够对导航员在本次编程工作中起到的作用给出客观评价,并完成500字以上的总结(5分)
领航员 来自地球的火星人
-
能够辅助驾驶员完成全部代码工作,并且为关键函数选用合适的覆盖标准设计测试用例,并编写代码进行单元自动测试(10分)
-
能够根据上次作业的代码检查表对驾驶员的本次工作进行评价(5分)
-
能够对本次工作完成500字以上的总结(5分)
3.开发环境
操作系统:Windows7
开发语言:java
开发环境:eclipse
4. 代码
代码地址
涉及的头文件和全局变量
package softwar;
import java.io.*;
import java.util.Random;
import java.util.Scanner;
static int Number;//题目数
static int operator;//是否有乘除运算!
static int Maxnumber;//最大数
static int haveBrackets;//是否有括号
static int haveFloat;//是否有小数
主函数
public static void main(String[] args) throws Exception{//抛出某种I/O异常
Print();
System.out.print("需要屏幕输出,输入1;用文件输出,输入0:");
Scanner input=new Scanner(System.in);
int haveFile=input.nextInt();
if(haveFile==1)
PrintQuestionsScreen(Number,operator, Maxnumber, haveBrackets, haveFloat);//屏幕输出
else
PrintQuestionsFile(Number,operator, Maxnumber, haveBrackets, haveFloat);//文件输出
}
以下是变量输入部分,以完成根据用户需要进行四则运算的生成的目标。
public static void Print() {
//功能选择菜单
Scanner input=new Scanner(System.in);
System.out.print("请输入题目数量: ");
Number=input.nextInt();
if(Number<1) {
System.out.print("输入错误\n");
return;
}
System.out.println();
System.out.print("是否需要乘除,需要请输入1,不需要请输入0: ");
operator=input.nextInt();
if(operator!=1&&operator!=0) {
System.out.print("输入错误\n");
return;
}
System.out.println();
System.out.print("请输入最大数: ");
Maxnumber=input.nextInt();
if(Maxnumber<1) {
System.out.print("输入错误\n");
return;
}
System.out.println();
System.out.print("是否需要小数,需要请输入1,不需要请输入0: ");
haveFloat=input.nextInt();
if(haveFloat!=1&&haveFloat!=0) {
System.out.print("输入错误\n");
return;
}
System.out.println();
System.out.print("是否需要括号,需要请输入1,不需要请输入0: ");
haveBrackets=input.nextInt();
if(haveBrackets!=1&&haveBrackets!=0) {
System.out.print("输入错误\n");
return;
}
}
使用rand函数进行随机数生成,分别进行小数的生成和整数的生成,以及使用随机数生成产生所需的操作符
public static void PrintQuestionsScreen(int Number,int operator,int Maxnumber,int haveBrackets,int haveFloat) {
int[] a=new int[10];//随机整数
float[] a1=new float[10];//随机小数
int c;
long t = System.currentTimeMillis();
String[] b={"+","-","*","/"};//运算符
Random random=new Random(t);//以随机时间作为种子创建一个Random对象
for(int i=0;i<Number;i++)
{
int n=random.nextInt(4)+2;//随机运算个数
if(haveBrackets==0) {
for(int j=0;j<n;j++) {
if(haveFloat==0)
a[j]=random.nextInt(Maxnumber-1)+1;
else {
int d=random.nextInt(2)+1;
a[j]=random.nextInt(Maxnumber-1)+1;
a1[j]=(float)(a[j]/Math.pow(10, d));
}
}
for(int k=0;k<n-1;k++) {
if(operator==0)
c=random.nextInt(2);//随机运算符
else
c=random.nextInt(4);
if(haveFloat==0)
System.out.print(a[k]+b[c]);
else
System.out.print(a1[k]+b[c]);
}
if(haveFloat==0)
System.out.println(a[n-1]+"=");
else
System.out.println(a1[n-1]+"=");
}
if(haveBrackets==1) {
for(int j=0;j<n;j++) {
if(haveFloat==0)
a[j]=random.nextInt(Maxnumber-1)+1;
else {
int d=random.nextInt(2)+1;
a[j]=random.nextInt(Maxnumber-1)+1;
a1[j]=(float)(a[j]/Math.pow(10, d));
}
}
int c1=random.nextInt(n-1);
int c2=random.nextInt(n-c1-1)+1;
for(int k=0;k<n-1;k++) {
if(operator==0)
c=random.nextInt(2);
else
c=random.nextInt(4);
if(c1==k)
System.out.print("(");//随机左括号产生的位置
if(haveFloat==0)
System.out.print(a[k]);
else
System.out.print(a1[k]);
if(c2+c1==k)
System.out.print(")");//随机右括号产生的位置
System.out.print(b[c]);
}
if(haveFloat==0)
System.out.print(a[n-1]);
else
System.out.print(a1[n-1]);
if(c1+c2==n-1)
System.out.print(")");
System.out.print("=\n");
}
}
}
5. 测试
屏幕输出测试
文件输出测试