软件工程个人作业01
软件工程概论上遗留的一道练习题,关于四则运算的一个程序。
一、 程序设计思想:
(1)用户这个可以选择出题或者退出这个程序,在主方法中用while实现,主方法主要调用功能。
(2)随机生成运算题目,需要有运算数和运算符,要调用random类,生成随机数封装成为一个方法,运算符也封装起来。
(3)整数和分数,分数用了两个随机数和“/”来表示,分数类型为string类型。
(4)查重,题目表示为String类型,用equicals方法判断,在出题的循环里嵌套一个循环。
(5)判断结果,用户输入之后与答案进行比较。
二、源代码
//四则运算,范围1-100,支持整数、真分数运算,可以判断结果,题目不重复,可定制出题数量 import java.util.Random; import java.util.Scanner; public class SiZe1 { public static void main(String[] args) { // TODO Auto-generated method stub Scanner inn=new Scanner(System.in); int a=0; boolean flag=true; //循环语句 while(flag){ System.out.println("1、出题,2、退出"); a=inn.nextInt(); if(a==1) Chu(inn); else flag=false; } } //出题功能 public static void Chu(Scanner inn){ int n1=0,n2=0,ch=0,ch1=0,ch2=0; int jieguo[] = null; String jieguo1[] = null; System.out.println("请选择要出的题目有没有真分数:1、有,2、没有"); ch=inn.nextInt(); if(ch==1) { System.out.println("请输入要出的整数题的数目"); n1=inn.nextInt(); System.out.println("请输入要出的真分数题的数目"); n2=inn.nextInt(); jieguo=TiMu(n1,inn); jieguo1=FenShuT(n2,inn); } if(ch==2) { System.out.println("请输入要出题的数目"); n1=inn.nextInt(); jieguo=TiMu(n1,inn); } /*System.out.println("请选择是否打印:1、打印,2、不打印"); ch1=inn.nextInt();*/ System.out.println("请选择是否答题:1、答题,2、不答题"); ch2=inn.nextInt(); if(ch2==1&&ch==1) { AnZheng(inn,jieguo,n1); AnFen(inn,jieguo1,n2); } if(ch2==1&&ch==2) { AnZheng(inn,jieguo,n1); } if(ch2==2) ; } //整数运算 public static int[] TiMu(int n,Scanner in){ int a[]=new int[n]; int b[]=new int[n]; char c[]=new char[n]; int jieguo[]=new int[n]; for(int i=0;i<n;i++){ //生成随机数,运算符 a[i]=SuiJi(); b[i]=SuiJi(); c[i]=YunSuanFu(); //查重 int k=i; for(int j=0;j<k;j++) { if((a[k]==a[j])&&(b[k]==b[j])&&(c[k]==c[j])) i--; } if(i==k) { System.out.print(a[i]); System.out.print(c[i]); System.out.println(b[i]); if(c[i]=='+') jieguo[i]=a[i]+b[i]; if(c[i]=='-') jieguo[i]=a[i]-b[i]; if(c[i]=='*') jieguo[i]=a[i]*b[i]; if(c[i]=='/') jieguo[i]=a[i]/b[i]; } } return jieguo; } //--整数答题 public static void AnZheng(Scanner in,int jieguo[],int n){ int jieguo1[]=new int[n]; for(int i=0;i<n;i++){ System.out.println("请输入"+(i+1)+"题结果"); jieguo1[i]=in.nextInt(); } for(int i=0;i<n;i++) { if(jieguo1[i]==jieguo[i]) System.out.println("第"+(i+1)+"道题答案正确"); else System.out.println("第"+(i+1)+"道题答案错误"); } } //随机数 public static int SuiJi(){ Random a=new Random(); return a.nextInt(101); } //运算符 public static char YunSuanFu(){ Random a=new Random(); char[] b={'+','-','*','/'}; return b[a.nextInt(b.length)]; } //---真分数运算结果 public static String[] FenShuT(int n,Scanner in){ String a[]=new String[n]; String b[]=new String[n]; char ch[]=new char[n]; String jieguo[]=new String[n]; String jieguo1[]=new String[n]; Random x=new Random(); char[] y={'+','-','*','/'}; int a1[]=new int[n]; int b1[]=new int[n]; int a2[]=new int[n]; int b2[]=new int[n]; int c1 = 0,c2 = 0; for(int i=0;i<n;i++) { a[i]=FenShu(); b[i]=FenShu(); ch[i]=y[x.nextInt(y.length)]; int k=i; for(int j=0;j<k;j++) { if(a[i].equals(a[j])&&b[i].equals(b[j])&&ch[i]==ch[k]) i--; } if(i==k) { //找到”/“位置 int po1=a[i].indexOf("/"); int po2=b[i].indexOf("/"); a1[i]=Integer.parseInt(a[i].substring(0,po1)); b1[i]=Integer.parseInt(a[i].substring(po1+1,a[i].length())); a2[i]=Integer.parseInt(b[i].substring(0,po2)); b2[i]=Integer.parseInt(b[i].substring(po2+1,b[i].length())); if(ch[i]=='+') { if(b1!=b2) { c2=b1[i]*b2[i]; c1=a1[i]*b2[i]+a2[i]*b1[i]; } else { c2=b1[i]; c1=a1[i]+b1[i]; } } if(ch[i]=='-') { if(b1!=b2) { c2=b1[i]*b2[i]; c1=a1[i]*b2[i]-a2[i]*b1[i]; } else { c2=b1[i]; c1=a1[i]-b1[i]; } } if(ch[i]=='*') { c1=a1[i]*a2[i]; c2=b1[i]*b2[i]; } if(ch[i]=='/'){ c1=a1[i]*b2[i]; c2=b1[i]*a2[i]; } } int gongyue=GongYue(c1,c2); jieguo[i]=HuaJian(c1,c2,gongyue); //-------------------出题 System.out.print(a[i]); System.out.print(ch[i]); System.out.println(b[i]); } return jieguo; } //--------------分数题目答题并判断结果 public static void AnFen(Scanner in,String jieguo[],int n){ String jieguo1[]=new String[n]; for(int i=0;i<n;i++){ System.out.println("请输入"+(i+1)+"题结果"); jieguo1[i]=in.next(); } for(int i=0;i<n;i++) { if(jieguo1[i].equals(jieguo[i])) System.out.println("第"+(i+1)+"道题答案正确"); else System.out.println("第"+(i+1)+"道题答案错误"); } } //---取出分子分母 //--产生真分数不包括0和1 public static String FenShu(){ int a=0,b=0,c;//c检查公约数 while(true) { a=SuiJi(); b=SuiJi(); if((a!=0)&&(b!=0)) break; } c=GongYue(a,b); if(c!=0) { if(a<b) return HuaJian(a,b,c); else return HuaJian(b,a,c); } else { if(a<b) return a+"/"+b; else return b+"/"+a; } } //---最大公约数 public static int GongYue(int a,int b){ while(a%b!=0){ int temp=a%b; a=b; b=temp; } return b; } //--化简分数 public static String HuaJian(int a,int b,int c){ return a/c+"/"+b/c; } }
三、运行结果截图
上课未完成的原因:对代码的编写并不熟练,问题理解能力差,需要时间来梳理问题的逻辑关系,没有很好的去分步解决问题。