• 课堂作业1(出题)


    题目:支持整数和真分数的四则运算(需验证程序的正确性),题目避免重复,可定制出题数量。

    思路:由于有真分数,所以我想到的是用int型的二维数组来存储数字(int a[num][2]),用char类型的一维数组来存储运算符,如果是整数则该行的第一个数存则为该数,第二个数存为零,如果是分数则该行的第一个数存分子,第二个数存分母,而且在生成分数的随机数时不包含0,利用1到4的随机数来随机生成运算符,在生成完所有的数后再查找是否有重复,如果有,则在该位置重新生成随机数。在计算之前先进行数字的处理,如果进行计算的两个数之中有分数,则将两个数的分母变为相同。最后约分。

    package 出题;
    
    import java.util.Random;
    import java.util.Scanner;
    
    public class test {
        static int[][] a;
        static int[][] b;
        static int[][] r;
        static char[] c;
        static int max;
        public static void main(String[] args) {
            // TODO Auto-generated method stub
         System.out.println("请输入题目的数量");
         Scanner sc = new Scanner(System.in);
         int num = sc.nextInt();
         System.out.println("请输入出现的最大整数");
         max = sc.nextInt();
         r = new int[num][num];
         symbol(num);
         setnumber(num);
         yuefen(num);
         show(num);
         zhuanhuan(num);
         count(num);
         yuefenr(num);
         System.out.println("是否输出答案 1、是 2、否");
         int n = sc.nextInt();
         if(n==1)
         {
             showanswer(num);
         }
         else
         {
             System.out.println("结束");
         }
        }
    public static void yuefen(int num)
    {
        for(int i=0;i<num;i++)
        {
            if(a[i][1]!=0&&a[i][0]!=0)
            {
                int n = (a[i][0]<a[i][1])?a[i][0]:a[i][1];
                for(int j=2;j<=n;j++)
                {
                    if(a[i][0]%j==0&&a[i][1]%j==0)
                    {
                        a[i][0] = a[i][0]/j;
                        a[i][1] = a[i][1]/j;
                    }
                }
            }
        }
        for(int i=0;i<num;i++)
        {
            if(b[i][1]!=0&&b[i][0]!=0)
            {
                int n = (b[i][0]<b[i][1])?b[i][0]:b[i][1];
                for(int j=2;j<=n;j++)
                {
                    if(b[i][0]%j==0&&b[i][1]%j==0)
                    {
                        b[i][0] = b[i][0]/j;
                        b[i][1] = b[i][1]/j;
                    }
                }
            }
        }
    }
    public static void yuefenr(int num)
    {    
            for(int i=0;i<num;i++)
            {
                if(r[i][1]!=0&&r[i][0]!=0)
                {
                    int n = (r[i][0]<r[i][1])?r[i][0]:r[i][1];
                    for(int j=2;j<=n;j++)
                    {
                        if(r[i][0]%j==0&&r[i][1]%j==0)
                        {
                            r[i][0] = r[i][0]/j;
                            r[i][1] = r[i][1]/j;
                        }
                    }
                }
            }
    }
    public static void showanswer(int num)
    {
        for(int i=0;i<num;i++)
        {
            if(r[i][1]==0||r[i][1]==1)
            {
                System.out.println(i+1+"、"+r[i][0]);
            }
            else 
            {
                if(Math.abs(r[i][1])>Math.abs(r[i][0]))
                {
                    if(r[i][0]==0)
                    {
                        System.out.println(i+1+"、"+0);
                    }
                    else
                    {
                        System.out.println(i+1+"、"+r[i][0]+"/"+r[i][1]);
                    }
                }
                else if(Math.abs(r[i][0])==Math.abs(r[i][1]))
                {
                    System.out.println(i+1+"、"+1);
                }
                else
                {
                    int m = r[i][0]%r[i][1];
                    System.out.println(i+1+"、"+r[i][0]/r[i][1]+"又"+m+"/"+r[i][1]);
                }
            }
        }
    }
    public static void zhuanhuan(int num)
    {
        for(int i=0;i<num;i++)
        {
            if(a[i][1]==0&&b[i][1]!=0)
            {
                a[i][0] = a[i][0]*b[i][1];
                a[i][1] = b[i][1];
            }
            else if(a[i][1]!=0&&b[i][1]==0)
            {
                b[i][0] = a[i][1]*b[i][0];
                b[i][1] = a[i][1];
            }
            else if(a[i][1]!=0&&b[i][1]!=0)
            {
                int t = a[i][1]*b[i][1];
                a[i][0] = a[i][0]*b[i][1];
                b[i][0] = b[i][0]*a[i][1];
                a[i][1] = t;
                b[i][1] = t;
            }
        }
    }
    public static void symbol(int num)
    {
        Random rand = new Random();
        c = new char[num];
        for(int i=0;i<num;i++)
        {
            int n = rand.nextInt(4)+1;
            if(n==1)
            {
                c[i]='*';
            }
            if(n==2)
            {
                c[i]='/';
            }
            if(n==3)
            {
                c[i]='+';
            }
            if(n==4)
            {
                c[i]='-';
            }
        }
    }
    public static void count(int num)
    {
        for(int i=0;i<num;i++)
        {
            if(c[i]=='+')
            {
                add(i);
            }
            if(c[i]=='-')
            {
                minus(i);
            }
            if(c[i]=='*')
            {
                multiply(i);
            }
            if(c[i]=='/')
            {
                divide(i);
            }
        }
    }
    public static void add(int i)
    {
        r[i][0] = a[i][0] + b[i][0];
        r[i][1] = a[i][1];
    }
    public static void minus(int i)
    {
        r[i][0] = a[i][0] - b[i][0];
        r[i][1] = a[i][1];
    }
    public static void multiply(int i)
    {
        r[i][0] = a[i][0] * b[i][0];
        r[i][1] = a[i][1] * b[i][1];
    }
    public static void divide(int i)
    {
        r[i][0] = a[i][0];
        r[i][1] = b[i][0];
    }
    public static void setnumber(int num)
    {
        Random rand = new Random();
        a = new int[num][2];
        b = new int[num][2];
            for(int i=0;i<num;i++)
            {
                int n = rand.nextInt(2)+1;
                int m = rand.nextInt(2)+1;
                if(n==1)//分数
                {
                    boolean flag = false;
                    while(flag==false)
                    {
                        int x = rand.nextInt(max)+1;
                        int y = rand.nextInt(max)+1;
                        if(x<y)
                        {
                            a[i][0] = x;
                            a[i][1] = y;
                            flag = true;
                        }
                    }
                }
                if(n==2)//整数
                {
                    a[i][0] = rand.nextInt(max);
                    a[i][1] = 0;
                }
                if(m==1)//分数
                {
                    boolean flag = false;
                    while(flag==false)
                    {
                        int x = rand.nextInt(max)+1;
                        int y = rand.nextInt(max)+1;
                        if(x<y)
                        {
                            b[i][0] = x;
                            b[i][1] = y;
                            flag = true;
                        }
                    }
                }
                if(m==2)//整数
                {
                    if(c[i]=='/')
                    {
                        b[i][0] = rand.nextInt(max)+1;
                    }
                    else
                    {
                        b[i][0] = rand.nextInt(max);
                    }
                    b[i][1] = 0;
                }
            }
                for(int i=0;i<num-1;i++)
                {
                    for(int j=i+1;j<num;j++)
                    {
                        while((a[i][0]==a[j][0]&&a[i][1]==a[j][1]&&b[i][0]==b[j][0]&&b[i][1]==b[j][1])||(a[i][0]==b[j][0]&&a[i][1]==b[j][1]&&b[i][0]==a[j][0]&&a[j][1]==b[i][1]))
                        {
                            int n=rand.nextInt(2)+1;
                            int m=rand.nextInt(2)+1;
                            if(n==1)//分数
                            {
                                boolean flag = false;
                                while(flag==false)
                                {
                                    int x = rand.nextInt(max);
                                    int y = rand.nextInt(max);
                                    if(x<y)
                                    {
                                        a[j][0] = x;
                                        a[j][1] = y;
                                        flag = true;
                                    }
                                }
                            }
                            if(n==2)//整数
                            {
                                a[j][0] = rand.nextInt(max);
                                a[j][1] = 0;
                            }
                            if(m==1)//分数
                            {
                                boolean flag = false;
                                while(flag==false)
                                {
                                    int x = rand.nextInt(max);
                                    int y = rand.nextInt(max);
                                    if(x<y)
                                    {
                                        b[j][0] = x;
                                        b[j][1] = y;
                                        flag = true;
                                    }
                                }
                            }
                            if(m==2)//整数
                            {
                                if(c[j]=='/')
                                {
                                    b[j][0] = rand.nextInt(max)+1;
                                }
                                else
                                {
                                    b[j][0] = rand.nextInt(max);
                                }
                                b[j][1] = 0;
                            }
                        }
                    }
                }
    }
    public static void show(int num)
    {
        for(int i=0;i<num;i++)
        {
            if(a[i][1]==0)
            {
                System.out.print(i+1+"、"+a[i][0]+" "+c[i]+" ");
                if(b[i][1]==0)
                {
                    System.out.println(b[i][0]+" =");
                }
                else
                {
                    System.out.println(" ("+b[i][0]+"/"+b[i][1]+") =");
                }
            }
            else
            {
                System.out.print(i+1+"、("+a[i][0]+"/"+a[i][1]+") "+c[i]+" ");
                if(b[i][1]==0)
                {
                    System.out.println(b[i][0]+" =");
                }
                else
                {
                    System.out.println("("+b[i][0]+"/"+b[i][1]+") =");
                }
            }
        }
    }
    }

    运行结果截图:

  • 相关阅读:
    Java并发之线程管理(线程基础知识)
    spring aop使用
    java动态代理
    java深拷贝与浅拷贝
    装饰模式(也叫包装模式)
    Spring基于XML方式的使用
    javaWeb域对象
    静态代理和动态代理
    getAnnotation的一个坑
    (转)文件上传org.apache.tomcat.util.http.fileupload.FileUploadException: Stream closed
  • 原文地址:https://www.cnblogs.com/haoyize/p/6492335.html
Copyright © 2020-2023  润新知