软件工程个人作业03
Posted yy&
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了软件工程个人作业03相关的知识,希望对你有一定的参考价值。
小组成员:严羽卿、杨茵
工作照片:
设计思想:
1.在进行不加括号的运算时,我们可以通过产生的表达式直接求得正确值,然后跟用户输入的值进行比较;
2.在进行有括号的运算时,我们可以通过循环求得每一轮循环所得值,并存放入数组中;再通过判断每一次循环后的运算符,来决定数组值之间的加减乘除,以求得最后正确值,然后跟用户输入的值进行比较。
源程序代码:
import java.util.Scanner; import java.util.ArrayList; public class Test { public static void main(String[] args){ int N,i,N1,N2; int sum=0; String str; String hh; Scanner in=new Scanner(System.in); change fra=new change(); System.out.println("请输入需要打印的运算题的数目:"); N=in.nextInt(); System.out.println("请选择是否需要分数运算(Y/N):"); hh=in.next(); if(hh.equals("Y"))//分数运算 { for(i=0;i<N;i++) { int a,b,c,d; int s1,s2; a=(int) (Math.random()*100); b=(int) (Math.random()*99+1); //分母不等于0 c=(int) (Math.random()*100); d=(int) (Math.random()*99+1); int h=(int)(Math.random()*4); int aa=0,bb=0,cc=0,dd=0; //为了产生分数,分子也不可为零 if(a==0) a=(int) (Math.random()*99+1); if(c==0) c=(int) (Math.random()*99+1); //化简分数 int j; j=fra.change_(a,b); aa=a/j; bb=b/j; //化简分数 int p; p=fra.change_(c,d); cc=c/p; dd=d/p; int j1; int s11,s22; String str1; if(h==0) { //化简后,分母等于1时,直接输出分子 if(bb!=1&&dd!=1) System.out.println(aa+"/"+bb+" + "+cc+"/"+dd+"="); else if(bb==1&&dd!=1) System.out.println(aa+" + "+cc+"/"+dd+"="); else if(bb!=1&&dd==1) System.out.println(aa+"/"+bb+" + "+cc+"="); else System.out.println(aa+"+"+cc+"="); //分数加法计算 s1=aa*dd+bb*cc; s2=bb*dd; j1=fra.change_(s1,s2); s11=s1/j1; s22=s2/j1; str1=s11+"/"+s22; str=in.next(); if(fra.judge_FRA(str1,str)==1) { sum++; } System.out.println("正确"+sum+"道题."); } else if(h==1) { //不能产生负数 int t1,t2; if((a/b-c/d)<0) { t1=aa; aa=cc; cc=t1; t2=bb; bb=dd; dd=t2; } //化简后,分母等于1时,直接输出分子 if(bb!=1&&dd!=1) System.out.println(aa+"/"+bb+" - "+cc+"/"+dd+"="); else if(bb==1&&dd!=1) System.out.println(aa+" - "+cc+"/"+dd+"="); else if(bb!=1&&dd==1) System.out.println(aa+"/"+bb+" - "+cc+"="); else System.out.println(aa+"-"+cc+"="); //分数减法计算 s1=aa*dd-bb*cc; s2=bb*dd; j1=fra.change_(s1,s2); s11=s1/j1; s22=s2/j1; str1=s11+"/"+s22; str=in.next(); if(fra.judge_FRA(str1,str)==1) { sum++; } System.out.println("正确"+sum+"道题."); } else if(h==2) { //化简后,分母等于1时,直接输出分子 if(bb!=1&&dd!=1) System.out.println(aa+"/"+bb+" * "+cc+"/"+dd+"="); else if(bb==1&&dd!=1) System.out.println(aa+" * "+cc+"/"+dd+"="); else if(bb!=1&&dd==1) System.out.println(aa+"/"+bb+" * "+cc+"="); else System.out.println(aa+"*"+cc+"="); //分数乘法计算 s1=aa*cc; s2=bb*dd; j1=fra.change_(s1,s2); s11=s1/j1; s22=s2/j1; str1=s11+"/"+s22; str=in.next(); if(fra.judge_FRA(str1,str)==1) { sum++; } System.out.println("正确"+sum+"道题."); } else { //化简后,分母等于1时,直接输出分子 if(bb!=1&&dd!=1) System.out.println("("+aa+"/"+bb+")"+" / "+"("+cc+"/"+dd+")"+"="); else if(bb==1&&dd!=1) System.out.println(aa+" / "+"("+cc+"/"+dd+")"+"="); else if(bb!=1&&dd==1) System.out.println("("+aa+"/"+bb+")"+" / "+cc+"="); else System.out.println(aa+"/"+cc+"="); //分数除法计算 s1=aa*dd; s2=bb*cc; j1=fra.change_(s1,s2); s11=s1/j1; s22=s2/j1; str1=s11+"/"+s22; str=in.next(); if(fra.judge_FRA(str1,str)==1) { sum++; } System.out.println("正确"+sum+"道题."); } } } else if(hh.equals("N"))//整数运算 { System.out.println("请选择是否需要产生括号的运算题(Y/N):"); String str1,str2,str3; double strr2; str=in.next(); double strr1=0; double ss; if(str.equals("Y")) { System.out.println("请输入数值范围:"); N1=in.nextInt(); for(i=0;i<N;i++) { ArrayList<Integer> al1=new ArrayList<Integer>(); //申请动态数组存放操作数 ArrayList<Integer> al2=new ArrayList<Integer>(); //申请动态数组存放运算符 int m,n,a,b; int j,k; m=(int) (Math.random()*7+3); //限制操作数个数 n=m-1; //运算符个数 for(j=0;j<m;j++) { a=(int) (Math.random()*(N1-1)+1); al1.add(a); }//将操作数压入al1数组 for(k=0;k<n;k++) { b=(int) (Math.random()*4); al2.add(b); }//将运算符压入al2数组 if(m==3)//产生的操作数是3个 { if((int)al2.get(0)>(int)al2.get(1))//比较优先级 { if((int)al2.get(0)==1) { System.out.print((int)al1.get(0)+"-"+(int)al1.get(1)+"+"+(int)al1.get(2)); strr1=(int)al1.get(0)-(int)al1.get(1)+(int)al1.get(2); } else if((int)al2.get(0)==2) { if((int)al2.get(1)==0) { System.out.print((int)al1.get(0)+"*"+"("+(int)al1.get(1)+"+"+(int)al1.get(2)+")"); strr1=(int)al1.get(0)*((int)al1.get(1)+(int)al1.get(2)); } else if((int)al2.get(1)==1) { System.out.print((int)al1.get(0)+"*"+"("+(int)al1.get(1)+"-"+(int)al1.get(2)+")"); strr1=(int)al1.get(0)*((int)al1.get(1)-(int)al1.get(2)); } } else if((int)al2.get(0)==3) { if((int)al2.get(1)==0) { System.out.print((int)al1.get(0)+"/"+"("+(int)al1.get(1)+"+"+(int)al1.get(2)+")"); strr1=(int)al1.get(0)/((int)al1.get(1)+(int)al1.get(2)); } else if((int)al2.get(1)==1) { System.out.print((int)al1.get(0)+"/"+"("+(int)al1.get(1)+"-"+(int)al1.get(2)+")"); strr1=(int)al1.get(0)/((int)al1.get(1)-(int)al1.get(2)); } if((int)al2.get(1)==2) { System.out.print((int)al1.get(0)+"/"+(int)al1.get(1)+"*"+(int)al1.get(2)); strr1=(int)al1.get(0)/(int)al1.get(1)*(int)al1.get(2); } } } else if((int)al2.get(0)<(int)al2.get(1)||(int)al2.get(0)==(int)al2.get(1))//比较优先级 { if((int)al2.get(0)==0) { if((int)al2.get(1)==0) { System.out.print((int)al1.get(0)+"+"+(int)al1.get(1)+"+"+(int)al1.get(2)); strr1=(int)al1.get(0)+(int)al1.get(1)+(int)al1.get(2); } else if((int)al2.get(1)==1) { System.out.print((int)al1.get(0)+"+"+(int)al1.get(1)+"-"+(int)al1.get(2)); strr1=(int)al1.get(0)+(int)al1.get(1)-(int)al1.get(2); } else if((int)al2.get(1)==2) { System.out.print((int)al1.get(0)+"+"+(int)al1.get(1)+"*"+(int)al1.get(2)); strr1=(int)al1.get(0)+(int)al1.get(1)*(int)al1.get(2); } else if((int)al2.get(1)==3) { System.out.print((int)al1.get(0)+"+"+(int)al1.get(1)+"/"+(int)al1.get(2)); strr1=(int)al1.get(0)+(int)al1.get(1)/(int)al1.get(2); } } else if((int)al2.get(0)==1) { if((int)al2.get(1)==1) { System.out.print((int)al1.get(0)+"-"+(int)al1.get(1)+"-"+(int)al1.get(2)); strr1=(int)al1.get(0)-(int)al1.get(1)-(int)al1.get(2); } else if((int)al2.get(1)==2) { System.out.print((int)al1.get(0)+"-"+(int)al1.get(1)+"*"+(int)al1.get(2)); strr1=(int)al1.get(0)-(int)al1.get(1)*(int)al1.get(2); } else if((int)al2.get(1)==3) { System.out.print((int)al1.get(0)+"-"+(int)al1.get(1)+"/"+(int)al1.get(2)); strr1=(int)al1.get(0)-(int)al1.get(1)/(int)al1.get(2); } } else if((int)al2.get(0)==2) { if((int)al2.get(1)==2) { System.out.print((int)al1.get(0)+"*"+(int)al1.get(1)+"*"+(int)al1.get(2)); strr1=(int)al1.get(0)*(int)al1.get(1)*(int)al1.get(2); } else if((int)al2.get(1)==3) { System.out.print((int)al1.get(0)+"*"+(int)al1.get(1)+"/"+(int)al1.get(2)); strr1=(int)al1.get(0)*(int)al1.get(1)/(int)al1.get(2); } } else if((int)al2.get(0)==3) { System.out.print((int)al1.get(0)+"/"+"("+(int)al1.get(1)+"/"+(int)al1.get(2)+")"); strr1=(int)al1.get(0)/((int)al1.get(1)/(int)al1.get(2)); } } System.out.print("="); ss=in.nextDouble(); if(fra.judge(strr1,ss)==1) { sum++; } System.out.println("正确"+sum+"道题."); } else if(m>=4)//产生的操作大于等于4个 { double sumss=0; int r; int rr=0; int jj; double list[]=new double[7];//存放和 double sums[]=new double[4]; for(r=0;r<7;r++) { list[r]=0; } for(r=0;r<4;r++) { sums[r]=0; } if(al2.size()%2==0) { jj=al2.size()/2; } else jj=(al2.size()-1)/2; for(j=0;j<=jj;j=j+2)//输出运算表达式 { k=j; if((int)al2.get(j+2)==2||(int)al2.get(j+2)==3) { list[j+1]=1; sums[rr+1]=1; } list[jj]=(int)al1.get(al1.size()-1); System.out.print("("); if((int)al2.get(j)>(int)al2.get(j+1))//比较运算符优先级 { if((int)al2.get(j)==1)//第一个出现减法 { System.out.print((int)al1.get(k)+"-"+(int)al1.get(k+1)+"+"+(int)al1.get(k+2)); list[j]=(int)al1.get(k)-(int)al1.get(k+1)+(int)al1.get(k+2); } else if((int)al2.get(j)==2)//第一个出现乘法 { if((int)al2.get(j+1)==0) { System.out.print((int)al1.get(k)+"*"+"("+(int)al1.get(k+1)+"+"+(int)al1.get(k+2)+")"); list[j]=(int)al1.get(k)*+((int)al1.get(k+1)+(int)al1.get(k+2)); } else if((int)al2.get(j+1)==1) { System.out.print((int)al1.get(k)+"*"+"("+(int)al1.get(k+1)+"-"+(int)al1.get(k+2)+")"); list[j]=(int)al1.get(k)*((int)al1.get(k+1)-(int)al1.get(k+2)); } } else if((int)al2.get(j)==3)//第一个出现除法 { if((int)al2.get(j+1)==0) { System.out.print((int)al1.get(k)+"/"+"("+(int)al1.get(k+1)+"+"+(int)al1.get(k+2)+")"); list[j]=(int)al1.get(k)/((int)al1.get(k+1)+(int)al1.get(k+2)); } else if((int)al2.get(j+1)==1) { if((int)al1.get(k+1)==(int)al1.get(k+2)) { System.out.print((int)al1.get(k)+"/"+"("+((int)al1.get(k+1)+1)+"-"+(int)al1.get(k+2)+")"); list[j]=(int)al1.get(k)/(((int)al1.get(k+1)+1)-(int)al1.get(k+2)); } else { System.out.print((int)al1.get(k)+"/"+"("+(int)al1.get(k+1)+"-"+(int)al1.get(k+2)+")"); list[j]=(int)al1.get(k)/((int)al1.get(k+1)-(int)al1.get(k+2)); } } if((int)al2.get(j+1)==2) { System.out.print((int)al1.get(k)+"/"+(int)al1.get(k+1)+"*"+(int)al1.get(k+2)); list[j]=(int)al1.get(k)/(int)al1.get(k+1)*(int)al1.get(k+2); } } } else if((int)al2.get(j)<(int)al2.get(j+1)||(int)al2.get(j)==(int)al2.get(j+1)) { if((int)al2.get(j)==0) { if((int)al2.get(j+1)==0)//第一个出现加法 { System.out.print((int)al1.get(k)+"+"+(int)al1.get(k+1)+"+"+(int)al1.get(k+2)); list[j]=(int)al1.get(k)+(int)al1.get(k+1)+(int)al1.get(k+2); } else if((int)al2.get(j+1)==1) { System.out.print((int)al1.get(k)+"+"+(int)al1.get(k+1)+"-"+(int)al1.get(k+2)); list[j]=(int)al1.get(k)+(int)al1.get(k+1)-(int)al1.get(k+2); } else if((int)al2.get(j+1)==2) { System.out.print((int)al1.get(k)+"+"+(int)al1.get(k+1)+"*"+(int)al1.get(k+2)); list[j]=(int)al1.get(k)+(int)al1.get(k+1)*(int)al1.get(k+2); } else if((int)al2.get(j+1)==3) { System.out.print((int)al1.get(k)+"+"+(int)al1.get(k+1)+"/"+(int)al1.get(k+2)); list[j]=(int)al1.get(k)+(int)al1.get(k+1)/(int)al1.get(k+2); } } else if((int)al2.get(j)==1)//第一个出现减法 { if((int)al2.get(j+1)==1) { System.out.print((int)al1.get(k)+"-"+(int)al1.get(k+1)+"-"+(int)al1.get(k+2)); list[j]=(int)al1.get(k)-(int)al1.get(k+1)-(int)al1.get(k+2); } else if((int)al2.get(j+1)==2) { System.out.print((int)al1.get(k)+"-"+(int)al1.get(k+1)+"*"+(int)al1.get(k+2)); list[j]=(int)al1.get(k)-(int)al1.get(k+1)*(int)al1.get(k+2); } else if((int)al2.get(j+1)==3) { System.out.print((int)al1.get(k)+"-"+(int)al1.get(k+1)+"/"+(int)al1.get(k+2)); list[j]=(int)al1.get(k)-(int)al1.get(k+1)/(int)al1.get(k+2); } } else if((int)al2.get(j)==2)//第一个出现乘法 { if((int)al2.get(j+1)==2) { System.out.print((int)al1.get(k)+"*"+(int)al1.get(k+1)+"*"+(int)al1.get(k+2)); list[j]=(int)al1.get(k)*(int)al1.get(k+1)*(int)al1.get(k+2); } else if((int)al2.get(j+1)==3) { System.out.print((int)al1.get(k)+"*"+(int)al1.get(k+1)+"/"+(int)al1.get(k+2)); list[j]=(int)al1.get(k)*(int)al1.get(k+1)/(int)al1.get(k+2); } } else if((int)al2.get(j)==3)//第一个出现除法 { System.out.print((int)al1.get(k)+"/"+"("+(int)al1.get(k+1)+"/"+(int)al1.get(k+2)+")"); list[j]=(int)al1.get(k)/((int)al1.get(k+1)/(int)al1.get(k+2)); } } System.out.print(")"); if((int)al2.get(j+2)==0) { System.out.print("+"); sums[rr]=list[j]; sums[jj]=(int)al1.get(al1.size()-1); } else if((int)al2.get(j+2)==1) { System.out.print("-"); sums[rr]=list[j]; sums[jj]=(int)al1.get(al1.size()-1); } else if((int)al2.get(j+2)==2) { System.out.print("*"); sums[rr]=list[j]*list[j+1]; } else if((int)al2.get(j+2)==3) { System.out.print("/"); sums[rr]=list[j]/list[j+1]; } rr++; j++; /* if((int)al2.get(al1.size()-1)==0||(int)al2.get(al1.size()-1)==1) { sums[jj]=(int)al1.get(al1.size()-1); }*/ } int rrr=1; sumss=sums[0]; for(j=0;j<jj;j=j+2) { if((int)al2.get(j+2)==0) { sumss+=sums[rrr]; } else if((int)al2.get(j+2)==1) { sumss=sumss-sums[rrr]; } else if((int)al2.get(j+2)==2) { sumss=sumss*sums[rrr]; } else if((int)al2.get(j+2)==2) { sumss=sumss/sums[rrr]; } } System.out.print((int)al1.get(al1.size()-1)); //输出最后一位操作数 System.out.print("="); strr1=in.nextDouble(); if(fra.judge(sumss,strr1)==1) { sum++; } System.out.println(sumss); System.out.println("正确"+sum+"道题."); } } } else if(str.equals("N"))//不需要产生括号 { System.out.println("请输入数值范围:"); N2=in.nextInt(); System.out.println("请选择是否有无乘除法的运算题(Y/N):"); str1=in.next(); if(str1.equals("Y"))//有乘除法 { System.out.println("请选择是否有无余数的运算题(Y/N):"); str2=in.next(); if(str2.equals("Y"))//需要有余数 { System.out.println("请选择是否有负数(Y/N):"); str3=in.next(); for(i=0;i<N;i++) { int a,b,c,c1,h,h2; a=(int) (Math.random()*N2); b=(int) (Math.random()*N2); h=(int) (Math.random()*4); //控制加减运算符 c=(int) (Math.random()*(N2-1)+1); c1=(int) (Math.random()*10+1); //控制倍数 if(str3.equals("Y"))//有负数 { if(h==0)//加法 { h2=(int) (Math.random()*2); //控制有无负数 if(h2==0) { System.out.println(a+"+"+b+"="); double s; s=a+b; strr2=in.nextDouble(); if(fra.judge(s,strr2)==1) { sum++; } } else if(h2==1) { System.out.println("-"+a+"+"+b+"="); double s; s=-a+b; strr2=in.nextDouble(); if(fra.judge(s,strr2)==1) { sum++; } } } if(h==1)//减法 { h2=(int) (Math.random()*2); //控制有无负数 if(h2==0) { System.out.println(a+"-"+b+"="); double s; s=a-b; strr2=in.nextDouble(); if(fra.judge(s,strr2)==1) { sum++;
以上是关于软件工程个人作业03的主要内容,如果未能解决你的问题,请参考以下文章