一、时间记录日志:
日期 | 开始时间 | 结束时间 | 中断时间 | 净时间 | 活动 | 备注 |
3.14 | 8:00 | 9:50 | 10 | 100 | 上课 | 课间 |
3.15 | 16:00 | 18:00 | 10 | 110 | 编程。阅读 | |
3.17 | 19:00 | 20:50 | 110 | 编程 | ||
3.19 | 14:00 | 18:00 | 20 | 220 | 编程 |
二、缺陷记录日志:
日期 | 编号 | 引入阶段 | 排除阶段 | 修复时间 | 修复缺陷 |
3.15 | 1 | 编码 | 编译 | 15min | |
描述:For循环里没有初始化变量 | |||||
2 | 编码 | 编码 | 20min | ||
描述:While和If语句运用错误 | |||||
三、项目计划总结:
1、设计思路和设计心得:在做这个程序之前,我首先考虑的是要将功能加到上次的程序里面。考虑到上次没有化简真分数,所以我先考虑用辗转相除法递归解决这个问题,但是因为对辗转相除法的理解不够,我还是选择了用For循环的麻烦的方法,在这里因为循环没有初始化一个变量浪费了很多时间。为了防止出现相同的式子,我和我的搭档讨论了一个FOR循环套fOR循环的方法解决了这个问题,在分数的运算里,我一开始打算一出现重复的就把分子分母相加赋值给分母,但是因为考虑到这样会超出自己定义的数值的范围,所以作废,后来我用了Whlie语句来解决,一旦相同就加1,还写了几个IF语句来控制加1后可能出现的情况。因为我的运算符的控制使用INT类型的数来决定的,所以控制有无乘除就特别简单,只需要用一个IF语句来控制是%2还是%4即可。有无负数我用了WHILE语句来控制,一旦不满足就继续重随,这里要说明的是,在我的程序里,有负数不代表没有正数的结果,但是没有负数一定只有正数。
在编写程序的过程中,我和我的搭档会因为一个很小的BUG浪费很多时间,比如我在写程序的期间,会因为要用IF语句而用了While语句导致无法输出,会因为没有在循环开头初始化变量导致结果不正确。这些小问题都是要极力避免的。还有一个不足就是,程序用了太多的IF语句控制,可能会比较乱。
括号问题不会做,未在规定时间完成,毫无思路,查阅了JAVA中的栈的写法发现和我的代码格格不入,时间不够也就放弃了。
2、程序源代码:
import java.util.Scanner; //20142984chengchongjing //sizeyunsuan 2 public class Main { public static void main(String[] args) { // TODO 自动生成的方法存根 Scanner in=new Scanner(System.in); System.out.println("请输入数据范围 1- "); int F=in.nextInt(); System.out.println("请输入要生成的整数四则运算的个数 "); int n1=in.nextInt(); System.out.println("有无乘除法 有输入1 没有输入0"); int Jiajian; Jiajian=in.nextInt(); System.out.println("加减无有负数 有输入1 没有输入0"); int Fu=in.nextInt(); int Yv=3; if(Jiajian==1) { System.out.println("除法有无余数 有输入1 没有输入0"); Yv=in.nextInt(); } int Fis[] =new int[n1]; int Sec[] =new int[n1]; int Thr[] =new int[n1]; int i; for(i =0;i<n1;i++) { Sec[i]=(int)(Math.random()*(F/2)); Fis[i]=(int)(Math.random()*F); if(Jiajian==0) { Thr[i]=((int)(Math.random()*F))%2; } if(Jiajian==1) { Thr[i]=((int)(Math.random()*F))%4; } if(Thr[i]==3&&Sec[i]==0){Sec[i]++;}//防止除法里分母为0 ; if(Yv==0&&Thr[i]==3){ while(Fis[i]%Sec[i]!=0) { Fis[i]=Sec[i]*2;} } if(Yv==1&&Thr[i]==3){ while(Fis[i]%Sec[i]==0) { Fis[i]=(int)(Math.random()*F);} if(Fu==0&&Thr[i]==1){ while (Fis[i]<Sec[i]){ Fis[i]=(int)(Math.random()*F);} } } } for(i=0;i<n1-1;i++) { for(int j=i;j<n1-1;j++) { if((Fis[i]==Fis[j])&&(Sec[i]==Sec[j])&&(Thr[i]==Thr[j])) { Fis[i]=Fis[i]+1; } } }//比较是否重复 for(i=0;i<n1;i++) { if(Thr[i]==0) System.out.println(Fis[i]+" + "+ Sec[i]+"="); if(Thr[i]==1) System.out.println(Fis[i]+" - "+ Sec[i]+"="); if(Thr[i]==2) System.out.println(Fis[i]+" * "+ Sec[i]+"="); if(Thr[i]==3) System.out.println(Fis[i]+" / "+ Sec[i]+"="); } System.out.println("请输入要生成的分数四则运算的个数 "); int n2=in.nextInt(); int Fis1[] =new int[n2]; int Sec1[] =new int[n2]; int Thr1[] =new int[n2]; int Four[] =new int[n2]; for(int j=0;j<n2;j++) { Fis1[j]=(int)(Math.random()*F); Sec1[j]=(int)(Math.random()*F); Thr1[j]=(int)(Math.random()*F); Four[j]=(int)(Math.random()*F); if( Fis1[j]> Sec1[j]){ int Chang; Chang= Fis1[j]; Fis1[j]= Sec1[j]; Sec1[j]=Chang; } if(Thr1[j]>Four[j]){ int Chang; Chang=Thr1[j];Thr1[j]=Four[j];Four[j]=Chang; }//交换大小 int Chang2=Fis1[j]; for(int k=2;k<=Chang2;k++){ if(Fis1[j]%k==0&& Sec1[j]%k==0) { Fis1[j]=Fis1[j]/k; Sec1[j]= Sec1[j]/k; k=1; } } int Chang3=Thr1[j]; for(int k=2;k<=Chang3;k++){ if(Thr1[j]%k==0&&Four[j]%k==0) { Thr1[j]=Thr1[j]/k; Four[j]=Four[j]/k; k=1; } }//化简真分数 while(Fis1[j]==0) { Fis1[j]=(int)(Math.random()*F);} while (Sec1[j]==0||Sec1[j]==Fis1[j]) { Sec1[j]=(int)(Math.random()*F);} while( Thr1[j]==0) { Thr1[j]=(int)(Math.random()*F);} while (Four[j]==0||Four[j]== Thr1[j]) { Four[j]=(int)(Math.random()*F);} int x=(int)(Math.random()*F); for( i=0;i<n2-1;i++){ for(int k=i;k<n2-1;k++) { if(Fis1[i]==Fis1[j]&&Sec1[i]==Sec1[j]&&Thr1[i]==Thr1[j]&&Four[i]==Four[j]) { Sec1[i]=Sec1[i]+1; while (Sec1[i]==Fis1[i]) { Sec1[i]=Sec1[i]+1;} } } } if(x%4==0) System.out.println(Fis1[j]+"/"+Sec1[j]+" + "+Thr1[j]+"/"+Four[j]+"="); if(x%4==1) System.out.println(Fis1[j]+"/"+Sec1[j]+" - "+Thr1[j]+"/"+Four[j]+"="); if(x%4==2) System.out.println(Fis1[j]+"/"+Sec1[j]+" * "+Thr1[j]+"/"+Four[j]+"="); if(x%4==3) System.out.println(Fis1[j]+"/"+Sec1[j]+" / "+Thr1[j]+"/"+Four[j]+"="); } } }
3.运行截图: