您的位置:首页 > 其它

软件工程个人作业02。

2016-03-19 16:39 411 查看
1.设计思想:

  建立一个主函数,声明参数变量。另建一个空成员变量的类,用于设置主函数中的成员变量,或对调用的数组进行相关操作,然后在主函数将字符串进行连接。

2.程序代码:

package课堂;
importjava.util.Random;
importjava.io.File;
importjava.io.FileOutputStream;
importjava.io.IOException;
importjava.io.PrintStream;
publicclassTheAirthmeticOperation
{
publicstaticvoidmain(Stringargs[])throwsIOException
{
TheAirthmeticOperation_FuctionFuction=newTheAirthmeticOperation_Fuction();//声明Fuction。
FileOutputStreamfs=newFileOutputStream(newFile("D:\\text.txt"));
PrintStreamp=newPrintStream(fs);

intnum=Fuction.Setnumber();//num位数组上限。
intn1=100;//n1为随机数上限,默认100。
intn2=2;//n2控制有无乘除法,2:加减法;4:加减乘除法。
intn3=0;//n3控制输出方式,0:直接输出;1:输出到txt。
intn4=0;//n4控制是否定制多数运算。
intn5=0;//n5控制多数运算数量。
intn6=0;//n6控制多数运算有无括号。
Stringstr="";//初始化str,用于输出式子。
int[]Array1=newint[num];
int[]Array2=newint[num];//Array1,Array2数组用于求加减法或分数运算的第一个分数。
int[]Array3=newint[num];
int[]Array4=newint[num];//Array3,Array4用于生成第二个分数。
int[]judge1=newint[num];//根据随机结果输出算数符号。
int[]judge2=newint[num];//判断该组数据用于整数运算还是分数运算,0:整数;1:分数。
n1=Fuction.Setrange();//为n1设置值。
n2=Fuction.Set_mul_and_div();//为n2设置值。

for(inti=0;i<num;i++)
{
Array1[i]=Fuction.Randomnumber(n1);
Array2[i]=Fuction.Randomnumber(n1);
Array3[i]=Fuction.Randomnumber(n1);
Array4[i]=Fuction.Randomnumber(n1);
judge1[i]=newRandom().nextInt(n2);
judge2[i]=newRandom().nextInt(2);
}

Fuction.Setnegativenumber(Array1,Array2,num);//随机为Array1,Array2数组添加负号(可选择不添加)。
Array1=Fuction.Isrepetition(Array1,num,n1);//使Array1变得不相同。
Fuction.Setremainder(Array1,Array2,num,n2);//设置除法有无余数。
n3=Fuction.Printmethod();//为n3设置值。
n4=Fuction.Is_customization();//为n4设置值。
n5=Fuction.customization_number();//为n5设置值。
n6=Fuction.customization_brackets();//为n6设置值。

for(inti=0;i<num;i++)
{
if(judge2[i]==0)//judge2值为0时,执行整数运算。
{
str="";
str+=Array1[i]+Fuction.Symbol(str,judge1[i]);
if(Array2[i]<0)//Array2为负时,为其加括号。
{
str+="("+Array2[i]+")=";
}
else//不为负时,跳过。
str+=(Array2[i]+"=");
if(n3==0)
{
System.out.println(str);
}
else
{
p.println(str);
}

}
if(judge2[i]==1)//judge2值为1时,执行真分数运算。
{
Fuction.Absolutevaluecomparison(Array1,Array2,i);
Fuction.Absolutevaluecomparison(Array3,Array4,i);

str="";
str+="("+Array1[i]+"/"+Array2[i]+")"
+Fuction.Symbol(str,judge1[i])
+"("+Array3[i]+"/"+Array4[i]+")=";

if(n3==0)
{
System.out.println(str);
}
else
{
p.println(str);
}
}
}
if(n4==1)
{
for(inti=0;i<n5;i++)
{
str="";
str=Fuction.customization(n6);
if(n3==0)
{
System.out.println(str);
}
else
{
p.println(str);
}
}
}
p.close();
}
}


importjava.util.Random;
importjava.util.Scanner;

publicclassTheAirthmeticOperation_Fuction
{
Scannersc=newScanner(System.in);

publicintRandomnumber(intn)//重写的随机函数,避免随机出零。
{
intnumber=0;
while(number==0)
{
number=newRandom().nextInt(n);
}
returnnumber;
}

publicintSetnumber()//设置数组,及习题数量。
{
intn=30;
System.out.println("输入数组数量");
n=sc.nextInt();
returnn;
}

publicintSetrange()//设置随机数范围。
{
intn=100;
System.out.println("输入数值范围");
n=sc.nextInt();
returnn;
}

publicintSet_mul_and_div()//设置习题中是否有乘除法。
{
intn=0;intm=2;
System.out.println("是否有乘除法:(0:无1:有)");
n=sc.nextInt();
if(n==0)
{
m=2;
}
else
m=4;
returnm;
}

publicintPrintmethod()//设置输出习题方式。
{
intn=0;
System.out.println("打印方式:(0:直接输出1:打印到txt)");
n=sc.nextInt();
returnn;
}

publicintIs_customization()//是否定制多数运算。
{
intn=0;
System.out.println("是否定制多数运算:(0:否1:是)");
n=sc.nextInt();
returnn;
}

publicintcustomization_number()//设置多数运算数量。
{
intn=0;
System.out.println("输入多数运算数量");
n=sc.nextInt();
returnn;
}

publicintcustomization_brackets()//设置多数运算数量。
{
intn=0;
System.out.println("十位数运算是否有括号:(0:否1:是)");
n=sc.nextInt();
returnn;
}

publicStringcustomization(intn)//定制多数习题。
{
int[]Array=newint[10];//定义一个数组。
int[]a=newint[10];//控制数与数之间符号。
int[]b=newint[20];//控制在某位值是否出现括号。
String[]brackets=newString[20];//用于存放括号。
Stringstr="";

for(inti=0;i<10;i++)//随机数。
{
a[i]=newRandom().nextInt(4);
Array[i]=Randomnumber(20);
}
for(inti=0;i<20;i++)//初始化括号数组。
{
brackets[i]="";
}

if(n==1)//用户选择定制。
{
for(inti=0;i<20;i+=2)
{
b[i]=newRandom().nextInt(4);/*为b[i生成随机数,当b[i]为零时,
brackets[i]添加左括号,brackets[i+3]添加右括号,括号套括号未考虑。*/
if(i>=0&&i<17)//i>16时,没有位置添加右括号,遂向下执行。
{
if(b[i]==0)
{
brackets[i]+="(";
brackets[i+3]+=")";
i+=2;
}
}
}
}

for(inti=0;i<9;i++)//将数,括号,符号相连。
{
str+=brackets[2*i]+Array[i]+brackets[2*i+1];
str=Symbol(str,a[i]);
}
str+=Array[9]+brackets[19]+"=";

returnstr;
}

publicvoidSetremainder(int[]Array1,int[]Array2,intnum,intn2)
{//若设置除法无余数,另Array1[i]<Array2[i]。
if(n2==2)
{
return;
}
intn=0;
System.out.println("除法是否有余数:(0:无1:有)");
n=sc.nextInt();
if(n==0)
{
for(inti=0;i<num;i++)
{
Absolutevaluecomparison(Array1,Array2,i);
}
}
else
return;
}

publicvoidSetnegativenumber(int[]Array1,int[]Array2,intnum)
{//若设置有负数,随机为Array[i]添加符号,i为随机
intn=0;intstochastic1=0;intstochastic2=0;
System.out.println("运算有无负数:(0:无1:有)");
n=sc.nextInt();
if(n==0)
{
return;
}
else
{
while(true)
{
stochastic1=Randomnumber(num);
stochastic2=Randomnumber(num);
Array1[stochastic1]=-Array1[stochastic1];
Array2[stochastic2]=-Array2[stochastic2];
if(stochastic1==1)//当stochastic1=1时,跳出循环。
{
break;
}
}
}
}

publicvoidAbsolutevaluecomparison(int[]Array1,int[]Array2,inti)
{//使两个数最小的数放在Array[i]中,保证无余数或分数为真分数。
if(Math.abs(Array1[i])>Math.abs(Array2[i]))
{
intt=Array1[i];
Array1[i]=Array2[i];
Array2[i]=t;
}
}

publicint[]Isrepetition(int[]Array,intnum,intn1)
{//删除Array数组中重复元素,缺省数重新随机(此处未考虑随机后还有相等情况,因重复几率较低)。
intlength=1;
booleanflag=false;
for(inti=1;i<Array.length;i++)
{
for(intj=0;j<length;j++)
{
if(Array[i]==Array[j])
{
flag=true;
}
}
if(!flag)
{
Array[length]=Array[i];
length++;
}
flag=false;
}
int[]newArray=newint[num];
System.arraycopy(Array,0,newArray,0,length);
for(inti=length;i<num;i++)
{
newArray[i]=Randomnumber(n1);
}
returnnewArray;
}

publicStringSymbol(Stringstr,intvalue)
{//根据值为str添加符号。
if(value==0)
{
str+="+";
}
if(value==1)
{
str+="-";
}
if(value==2)
{
str+="*";
}
if(value==3)
{
str+="/";
}
returnstr;
}
}

3.运行截图
:







4.总结:

  用java写这么多行的程序还是头一次。平常还是习惯用c写。其中还是遇到了一些问题,比如java中似乎没有值地址递,想在别的函数中直接修改调用的值是不行的(除非调用的是数组的首地址),只能返回出来再赋值给它。想不这么实现也可以,就得把参数定义给成员变量。后来想到这里,确实可行,把设置的参数看成一组成员变量,不过顺序运行下来,也就一组对象,也没有必要重写大费周章了。在这点上,我好像看出了java的方便与麻烦之处。另一方面,通过网上的查询,也明白了点java中的输出流。总的来讲,收获还是不小的。

5.每周计划

听课编程读书总计
周一22.505
周二0100.5
周三0101
周四0101
周五00.500.5
周六00.500.5
周日001.51.5
6.时间记录日志

日期开始时间结束时间中断时间(min)净时间(min)活动备注
3.148:009:5010100上课课间休息十分钟
14:0017:3048132编程中断时间为躺着冥思或溜达
3.1514:0015:00258编程
21:0021:40535编程
3.167:007:20020编程
16:0016:30129编程
20:0020:40535编程
3.1716:3017:20842编程
3.187:007:15015编程
17:0017:30624编程
3.1911:0511:32027编程
总计//85507/
7.缺陷记录日志

  都是些数组超出长度的小错误,没有在修改缺陷这里花费多少时间。




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