zoukankan      html  css  js  c++  java
  • 软件工程个人作业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;
        }
    
    }

    三、运行结果截图

       

    上课未完成的原因:对代码的编写并不熟练,问题理解能力差,需要时间来梳理问题的逻辑关系,没有很好的去分步解决问题。

  • 相关阅读:
    Shell parameter expansion
    前端知识的一些总结
    IT增值服务实践心得体会:企业客户的钱比个人客户好赚得多
    IT增值服务实践心得体会:企业客户的钱比个人客户好赚得多
    电子商务网站的设计与实现(一):当前的一些购物体验和开发期望
    电子商务网站的设计与实现(一):当前的一些购物体验和开发期望
    个人官网第7次升级:全文搜索闪亮登场
    个人官网第7次升级:全文搜索闪亮登场
    关于开发简易搜索引擎的一些总结和思考
    雷观(十六):以习近平为首的新一届领导集体,大权在握,做事很有信心
  • 原文地址:https://www.cnblogs.com/jingxiaopu/p/6484961.html
Copyright © 2011-2022 走看看