软件工程个人作业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;
    }

}

 

三、运行结果截图

   

 

 

 

 

 

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

 

posted on 2017-03-01 16:39  王甜甜的小摩托  阅读(163)  评论(0编辑  收藏  举报

导航