您的位置:首页 > 其它

软件工程个人作业03

2016-03-26 13:34 369 查看
四则运算3

设计思想

1、输入:输入选择;

2、选择内容:选择出2位数的题还是多位数的题还是退出程序

选择1是否有乘除法(运算符0-1或0-3);

选择5加减有无负数;

选择6除法有无余数;

选择7是选择数量或打印方式。

3是数值范围的前域

4是数值范围的后域

3、加工:2位数的题设置循环,令其长度为一个足够大的数,满足程序一次运行可多次使用

是否有乘除法:在前面做出选择后,在下面只需设置运算符随机出数的范围在0-1之间还是0-3之间

数值范围:即四则运算随机出数的范围在前域~后域

加减有无负数:对随机生成的数字进行运算,如果进行加/减运算之后,有负数,则根据选择进行保留或舍弃

控制题目不能重复:将之前的题目存放在数组中,然后依次进行比较

打印方式:根据用户输入要求一行输出几列后,利用取余的方法判断是否要换行输出

计算则按照顺序计算即可

多位数的题:

设置循环,令其长度为一个足够大的数,满足程序一次运行可多次使用

是否有乘除法:在前面做出选择后,在下面只需设置运算符随机出数的范围在0-1之间还是0-3之间

数值范围:即四则运算随机出数的范围在前域~后域

加减有无负数:对随机生成的数字进行运算,如果进行加/减运算之后,有负数,则根据选择进行保留或舍弃

有无括号:用随机数来进行选择在原来式子之前还是之后进行添加

控制题目不能重复:将之前的题目存放在数组中,然后依次进行比较

打印方式:根据用户输入要求一行输出几列后,利用取余的方法判断是否要换行输出

带括号的计算是直接从最里层括号开始往外依次计算

不带括号的计算则分为没有乘除法和有乘除法

没有乘除法的是将运算式存为二维数组,将数值和运算符依次分别存放于两个数组中,然后按从左到右的顺序进行计算

有乘除法的则需进一步统计,在哪有除法或者乘法,然后先进行这两个运算。

4、输出:2位数运算,显示运算式以及用户输入的结果,还有系统判断的结果

最后,则是系统统计用户的做题情况

多位数运算则是显示运算式以及系统产生的结果

源程序代码

import java.util.Random;
import java.util.Scanner;
import javax.swing.JOptionPane;

public class Arithmetic {

public static void main(String[] args) {
// TODO 自动生成的方法存根
int c;//选择
int c1,c4,c5,c6,c7,c8;
int a,b,d1;//二位数运算
int c2,c3;
int e=0;//运算符
String s="";
double d=0.0;//2位数的结果,用户
double f=0.0,g=0.0;//2位数结果,系统,多位数结果,系统
int flag=0;//判断是否输出
int m=0;//题数
Random rand = new Random();
for(int i=0;i<100000000;i++)
{
System.out.println("请输入选择:1、2位数运算  2、多位数运算 3、退出");
Scanner input=new Scanner(System.in) ;
c=input.nextInt();
if(c==1)
{
System.out.println("请输入选择:1 、有乘除法 2、无乘除法");
Scanner input1=new Scanner(System.in) ;
c1=input1.nextInt();
System.out.println("请输入数值范围的前域 ");
Scanner input2=new Scanner(System.in) ;
c2=input2.nextInt();
System.out.println("请输入数值范围的后域");
Scanner input3=new Scanner(System.in) ;
c3=input3.nextInt();
System.out.println("请输入选择:1、加减有负数 2、加减无负数");
Scanner input4=new Scanner(System.in) ;
c4=input4.nextInt();
System.out.println("请输入选择:1、除法有余数 2、除法无余数");
Scanner input5=new Scanner(System.in) ;
c5=input5.nextInt();
System.out.println("请输入出题数量");
Scanner input6=new Scanner(System.in) ;
c6=input6.nextInt();
System.out.println("请输入在一行中输出几列运算式?");
Scanner input7=new Scanner(System.in) ;
c7=input7.nextInt();
String []Repeat=new String[2*c6];
for(int w=0;w<c6;w++)
{
int w1;
w1=w;
//有无乘除法
if(c1==1)
{
e=rand.nextInt(4);
}
if(c1==2)
{
e=rand.nextInt(2);
}
//数值范围
a=rand.nextInt(c3)%(c3-c2+1)+c2;
b=rand.nextInt(c3)%(c3-c2+1)+c2;
//加减有无负数
if(c4==1)//有负数
{
flag=0;
}
if(c4==2)
{
if(e==0)
{
if((a+b)>=0)
{
flag=0;
}
else
{
flag=1;
}
}
if(e==1)
{
if((a-b)>=0)
{
flag=0;
}
else
{
flag=1;
}
}
}
//符号
if(e==0)
{
s="+";
f=a+b;
}
if(e==1)
{
s="-";
f=a-b;
}
if(e==2)
{
s="*";
f=a*b;
}
if(e==3)
{
if(b!=0)
{
if(c5==1)
{
s="/";
f=a/b;
}
if(c5==2)
{
if(a%b==0)
{
s="/";
f=a/b;
}
if(a%b!=0)
{
flag=1;
}
}

}
}
//判断重复
if(a<0.0&&b>=0.0)
{
Repeat[w]="("+a+")"+s+b;
}
if(a>=0.0&&b<0.0)
{
Repeat[w]=a+s+"("+b+")";
}
if(a<0.0&&b<0.0)
{
Repeat[w]="("+a+")"+s+"("+b+")";
}
if(a>=0.0&&b>=0.0)
{
Repeat[w]=a+s+b;
}
for(int w2=0;w2<w1;w2++)
{
if(Repeat[w].equals(Repeat[w2]))
{
flag =1;
}
else
{flag =0;}
}
//打印
if(flag==0)
{
if((w+1)%c7==0)
{
for(int k=0;k<10000000;k++)
{
String inputx=JOptionPane.showInputDialog(Repeat[w]+"="+"请输入计算结果");
if(inputx!=null&&!inputx.equals(""))
{
d=Double.parseDouble(inputx);
break;
}
}
if(d==f)
{
System.out.println(Repeat[w]+"="+d+"正确");
m++;
}
if(d!=f)
{
System.out.println(Repeat[w]+"="+d+"不正确");
}
}
else
{

for(int k=0;k<10000000;k++)
{
String inputx=JOptionPane.showInputDialog(Repeat[w]+"="+"请输入计算结果");
if(inputx!=null&&!inputx.equals(""))
{
d=Double.parseDouble(inputx);
break;
}
}
if(d==f)
{
System.out.print(Repeat[w]+"="+d+"正确");
m++;
}
if(d!=f)
{
System.out.print(Repeat[w]+"="+d+"不正确");
}
}
}
if(flag==1)
{
c6++;
}

}
System.out.println("共"+c6+"道题"+"    "+m+"道题正确");
}
if(c==2)
{

System.out.println("请输入选择:1 、有乘除法 2、无乘除法");
Scanner input1=new Scanner(System.in) ;
c1=input1.nextInt();
System.out.println("请输入数值范围的前域 ");
Scanner input2=new Scanner(System.in) ;
c2=input2.nextInt();
System.out.println("请输入数值范围的后域");
Scanner input3=new Scanner(System.in) ;
c3=input3.nextInt();
/* System.out.println("请输入选择:1、加减有负数 2、加减无负数");
Scanner input4=new Scanner(System.in) ;
c4=input4.nextInt();
System.out.println("请输入选择:1、除法有余数 2、除法无余数");
Scanner input5=new Scanner(System.in) ;
c5=input5.nextInt();*/
System.out.println("请输入出题数量");
Scanner input6=new Scanner(System.in) ;
c6=input6.nextInt();
System.out.println("请输入在一行中输出几列运算式?");
Scanner input7=new Scanner(System.in) ;
c7=input7.nextInt();
System.out.println("请输入选择: 1、有括号 2、无括号");
Scanner input8=new Scanner(System.in) ;
c8=input8.nextInt();
//有无乘除法
if(c1==1)
{
e=rand.nextInt(4);
}
if(c1==2)
{
e=rand.nextInt(2);
}
//数值范围
a=rand.nextInt(c3)%(c3-c2+1)+c2;
b=rand.nextInt(c3)%(c3-c2+1)+c2;
String []Repeat=new String[2*c6];
if(e==0)
{
s="+";
g=a+b;
}
if(e==1)
{
s="-";
g=a-b;
}
if(e==2)
{
s="*";
g=a*b;
}
if(e==3)
{
if(b==0)
{
flag=1;
}
if(b!=0)
{
flag=0;
s="/";
g=a/b;
}
}
//出题数量
for(int w=0;w<c6;w++)
{
int p;//0为在原来基础上前面加数,1则是在后面加数
int ws;//几位数的运算
ws=rand.nextInt(8);
Repeat[w]=a+s+b;
if(c8==1)//有括号
{

for(int w1=0;w1<ws;w1++)
{
d1=rand.nextInt(c3)%(c3-c2+1)+c2;
p=rand.nextInt(2);
if(c1==1)
{
e=rand.nextInt(4);
}
if(c1==2)
{
e=rand.nextInt(2);
}
if(e==0)
{
s="+";
g=d1+g;
}
if(e==1)
{
s="-";
if(p==0)
{
g=d1-g;
}
if(p==1)
{
g=g-d1;
}
}
if(e==2)
{
s="*";
g=d1*g;
}
if(e==3)
{
if(b==0||g==0)
{
flag=1;
}
if(b!=0&&g!=0)
{
flag=0;
s="/";
if(p==0)
{
g=d1/g;
}
if(p==1)
{
g=g/d1;
}
}
}
if(p==0)
{
Repeat[w]=d1+s+"("+Repeat[w]+")";
}
if(p==1)
{
Repeat[w]="("+Repeat[w]+")"+s+d1;
}
}
}
if(c8==2)//无括号
{
int length=0;

String [][]Repeat1=new String[2*c6][100];
Repeat1[w][0]=""+a;
Repeat1[w][1]=s;
Repeat1[w][2]=""+b;
for(int w1=0;w1<ws;w1++)
{

d1=rand.nextInt(c3)%(c3-c2+1)+c2;
p=rand.nextInt(2);
if(c1==1)
{
e=rand.nextInt(4);
}
if(c1==2)
{
e=rand.nextInt(2);
}
if(e==0)
{
s="+";

}
if(e==1)
{
s="-";

}
if(e==2)
{
s="*";

}
if(e==3)
{
if(b==0)
{
flag=1;
}
if(b!=0)
{
flag=0;
s="/";

}
}

if(p==0)
{
int sl=0;//实际长度
Repeat[w]=d1+s+Repeat[w];
length=Repeat1[w].length;
for(int xx=0;xx<length;xx++)
{
String ss="";
ss=Repeat1[w][xx];
if(ss!=null&&!ss.equals(""))
{
sl++;
}
else
{
break;
}
}

for(int l=0;l<sl;l++)
{
Repeat1[w][l+2]=Repeat1[w][l];
}
Repeat1[w][0]=""+d1;
Repeat1[w][1]=s;
}
if(p==1)
{
int sl=0;
Repeat[w]=Repeat[w]+s+d1;
length=Repeat1[w].length;
for(int xx=0;xx<length;xx++)
{
String ss="";
ss=Repeat1[w][xx];
if(ss!=null&&!ss.equals(""))
{
sl++;
}
else
{
break;
}
}
Repeat1[w][sl]=s;
Repeat1[w][sl+1]=""+d1;
}
}
//计算结果
int []ns=new int[10];
int []nf=new int[9];
int ll=(Repeat1[w].length);
int sl=0;
for(int xx=0;xx<ll;xx++)
{
String ss="";
ss=Repeat1[w][xx];
if(ss!=null&&!ss.equals(""))
{
sl++;
}
else
{
break;
}
}
for(int l1=0;l1<sl;l1++)
{
if(l1%2==0)
{
ns[l1/2]=Integer.parseInt(Repeat1[w][l1]);
}
if(l1%2!=0)
{

nf[l1/2]=Repeat1[w][l1].charAt(0);
}
}

if(c1==1)
{

}
if(c1==2)
{
g=ns[0];
for(int l2=1;l2<(sl/2+1);l2++)
{
if(nf[l2-1]==43)
{
g=g+ns[l2];
}
if(nf[l2-1]==45)
{
g=g-ns[l2];
}
}
}
}

//判断重复
int w3=w;
for(int w2=0;w2<w3;w2++)
{
if(Repeat[w].equals(Repeat[w2]))
{
flag =1;
}
else
{flag =0;}
}
//打印
if(flag==1)
{
c6++;
}
if(flag==0)
{
if((w+1)%c7==0)
{
System.out.println(Repeat[w]+"="+g+"  ");
}
else
{
System.out.print(Repeat[w]+"="+g+"  ");
}
}
}
}
if(c==3)
{
break;
}

}
}

}


运行结果截图









编程总结分析

每次拿到题目,都不能冷静分析思考,这次结对编程,何同学是主力,在讨论的过程中,我发现了自身的很多问题,如思考的不全面

项目计划总结

姓名:张一博 日期:2016/3/26

听课

编写代码

阅读课本

准备考试

讨论设计思想

查阅资料

日总计

周日3.20

周一3.21

100

33

133

周二3.22

25

25

周三3.23

118

55

40

213

周四3.24

109

20

129

周五3.25

207

35

242

周六3.26

153

153

周总计

100

587

58

55

95

895

时间记录日志

学生:张一博 日期:2016/3/26

教师:王建民 课程:软件工程概论

日期

开始时间

结束时间

中断时间

净时间

活动

备注

C

U

3/21

8:00

9:50

10

100

听课

下课,休息

19:05

19:38

0

33

阅读构建之法

3/22

21:44

22:09

0

25

阅读梦断代码

3/23

16:02

20:30

55

213

讨论设计思想查资料,写程序

吃饭,休息,聊天

3/24

15:40

18:04

15

129

编程序,查资料

休息,玩手机

3/25

16:30

21:36

64

242

编程序,查资料

吃饭,休息

3/26

9:09

11:30

10

71

写代码

休息聊天

13:30

15:00

8

82

优化整理程序

聊天,休息

缺陷记录日志

姓名:张一博 日期:2016/3/26

教师:王建民 程序:四则运算3

日期编号引入阶段排除阶段修复时间修复缺陷缺陷类型
3/231编码设计1min程序打印方式20
描述程序打印方式不正确
3/232编码编译5min数组溢出20
描述用于无括号四则运算的的数组溢出
3/243编码编译10min二维数组实际长度20
描述实际长度不正确
3/244编码编译5min运算符转换为int20
描述string“+”、“-”转换为int出错
3/255编码设计5min20
描述用户输入“”出错
3/256编码设计5min20
描述无括号四则运算结果输出错误
3/257编码编译5min20
描述ss!=null&&!ss.equals(""),,漏掉!
附工作照片

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: