课堂结队作业:二维数组(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;

    }

}

原文地址:https://www.cnblogs.com/cxr0711/p/6938853.html