• 课堂结对作业:二维数组(1)


    结队成员:陈欣容,孙奇文

    1.要求:写一个能自动生成三十道小学四则运算题目的 “软件”,要求:除了整数以外,还要支持真分数的四则运算、题目避免重复、可定制出题的数量。

    2.思路:

      1)产生随机数choose,1或2,1表示生成整数表达式,2表示生成分数表达式,并用一个字符串数组存储表达式便于打印输出(长度由用户输入);

      2)用一个字符数组存储“+ - * ÷”等符号,取符号则生成随机数0-3;

      3)若choose为1,random生成两个整数作为表达式的左操作数和右操作数,并随机产生操作符;

      4)若choose为2,random生成四个整数分别作为左操作数的分子分母和右操作数的分子分母;

      5)用两个函数对生成的分数约分;

      6)调用System.out.println()函数打印,用PrintWriter和FileWriter将生成的表达式数组写入文件;

    3.代码:

    import java.util.*;import java.io.*;public class MathHomework {

        public static int choose;

        public static int randomArr[]=new int[2];

        public static Random ran=new Random();

        public static char randomCh[]={'+','-','*','÷','/'};

        public static String formula[];

        @SuppressWarnings({ "unused", "resource" })

        public static void main(String[] args) throws IOException{

            String fileName="homework.txt";

            Scanner in=new Scanner(System.in);

            FileWriter fw=new FileWriter(fileName);

            PrintWriter out=new PrintWriter(fw);

            if(fw==null){

                System.out.println("文件打开失败!");

            }

            

            int number;

            System.out.println("题目个数:");

            number=in.nextInt();

            formula=new String[number];

            for(int i=0;i<number;i++){

                choose=ran.nextInt(2)+1;

                formula[i]=creaFormula(choose);

                if(formula[i]==null)

                    i--;

            }

            showFormula(formula);

            //写入文件

            int len=formula.length;

            for(int i=0;i<len;i++){

                out.println("No."+(i+1)+": "+formula[i]);

                

            }

            fw.close();

            out.close();

        }

        public static String creaFormula(int x){

            if(x==1){

                String s="";

                randomNums(randomArr);

                int k=ran.nextInt(4);

                s=s+randomArr[0]+randomCh[k]+randomArr[1]+"=";

                return s;

                

            }

            else if(x==2){

                String s="";

                randomNums(randomArr);

                fun1(randomArr);

                

                s=s+"("+randomArr[0]+"/"+randomArr[1]+")";

                randomNums(randomArr);

                fun1(randomArr);

                int k=ran.nextInt(4);

                s=s+randomCh[k]+"("+randomArr[0]+"/"+randomArr[1]+")"+"=";

                return s;

            }

            else

                return null;

            

        }

        public static void showFormula(String s[]){

            int len=s.length;

            for(int i=0;i<len;i++){

                System.out.println("No."+(i+1)+": "+s[i]);

                

            }

        }

        //约分函数

        public static void fun1(int x[]){

            int k=fun2(x[0],x[1]);

            x[0]=x[0]/k;

            x[1]=x[1]/k;

        }

        //求分子分母最大公约数

        public static int fun2(int x,int y){

            int min,i;

            if(x>y) min=x;

            else

                min=y;

            for(i=min;i>=1;i--){

                if(x%i==0&&y%i==0){

                    break;

                }

            }

            return i;

        }

     

        public static void randomNums(int x[]){

            x[0]=ran.nextInt(20)+1;

            x[1]=ran.nextInt(20)+1;

        }

    }

  • 相关阅读:
    iBatis——自动生成DAO层接口提供操作函数(详解)
    【Spring Boot项目】Win7+JDK8+Tomcat8环境下的War包部署
    MySQL使用小记
    DB迁移:从SQL Server 2005到MySQL
    【文章学习】监控网页卡顿、崩溃
    为什么执行x in range(y)如此之快
    python笔试题(三)
    python笔试题(二)
    python笔试题(-)
    rest-framework(2)
  • 原文地址:https://www.cnblogs.com/sunqw/p/6986275.html
Copyright © 2020-2023  润新知