zoukankan      html  css  js  c++  java
  • 每日日报之”动手动脑“作业二

    1.编写一个方法,使用以上算法生成指定数目(比如1000个)的随机整数。

    import java.util.*;
    import java.util.Scanner;
    public class math 
    {
          public static void main(String args[])
          {
                    Scanner sc=new Scanner(System.in);
                    Random r=new Random(System.currentTimeMillis());
                    int n;
                    System.out.println( "请输入总数:" );
                    n=sc.nextInt();
                    for(int i=0;i<n;i++){System.out.println(r.nextInt());}
           }
    }

    运行结果如图:

    2.请看以下代码,你发现了有什么特殊之处吗?

     

    答: 该程序中所使用两个函数虽然名字相同,但由于实参类型不同且返回值类型不同,所以并不会发生冲突,这是JAVA的方法重载特性。

    四则运算JAVA半成品版

    此代码将之前的C++版改为了JAVA版,并又添置了些功能。

    代码如下:

    package homework;
    import java.util.*;
    import java.util.Scanner;
    import javax.script.*; 
    public class math 
    {
        private static int n,min,max,c,cc,kh=0,xz;
        private static char[] d={'+','-','*','/'};
        private static Scanner sc=new Scanner(System.in);
        public static void main(String args[])
        {
            DZ();
            TM();
        }
        public static void DZ()//菜单
        {
            System.out.println( "请输入题目总数:" );
            n=sc.nextInt();
            System.out.println("请选择:");
            System.out.println(" 1.小学二年级口算题");
            System.out.println(" 2.小学三年级口算题");
            System.out.println(" 3.小学四年级口算题");
            xz=sc.nextInt();
            System.out.println("请输入数值的范围."); 
            min=sc.nextInt();
            max=sc.nextInt();
            switch(xz)
            {
            case 1:
                while(max>100)
                {
                    System.out.println("小学二年级操作数范围不超过100,请重新输入最大值:");
                    max=sc.nextInt();
                }
                c=1;
                break;
            case 2:
                while(max>1000)
                {
                    System.out.println("小学三年级操作数范围不超过1000,请重新输入最大值:");
                    max=sc.nextInt();
                }
                System.out.println( "输入操作数个数:" );
                c=sc.nextInt()-1;
                while(c>3)
                {
                    System.out.println("小学三年级操作数不超过4个,请重新输入操作数个数:");
                    c=sc.nextInt()-1;
                }
                break;
            case 3:
                System.out.println( "输入操作数个数:" );
                c=sc.nextInt()-1;
                while(c>4)
                {
                    System.out.println("小学四年级操作数不超过5个,请重新输入操作数个数:");
                    c=sc.nextInt()-1;
                }
                System.out.println( "是否有括号?是请输入1,否请输入0:" );
                kh=sc.nextInt();
                break;
            }
            System.out.println( "是否有乘除法?是请输入1,否请输入0:" );
            cc=sc.nextInt();
        }
        public static String Tm()//每题
        {
            Random r=new Random();
            int sz;
            String ch=null;
            double a=r.nextInt(max)+min;
            while(a>max){a=r.nextInt(max)+min;}
            if(xz==1)
            {
                int b;
                if(cc==0) {sz=r.nextInt(2);}
                else{sz=r.nextInt(4);}//乘除法
                b=r.nextInt(max)+min;
                while(b>max){b=r.nextInt(max)+min;}
                if(d[sz]=='/')
                {
                    if(b==0){while(b==0||b>max) {b=r.nextInt(max)+min;}}//防止0为被除数
                    if(a%b!=0) 
                    {
                        while(a%b!=0||a>max||b>max)
                        {
                            a=r.nextInt(max)+min;
                            b=r.nextInt(max)+min;
                        }
                    }
                }
                ch=String.valueOf(a);
                ch+=String.valueOf(d[sz]);
                ch+=String.valueOf(b);
            }
            else
            {
                double[] b=new double[c];//操作数个数及数值范围
                int k=-1,h=-1,z;
                if(kh==1)//括号
                {
                    z=r.nextInt(2);
                    if(z==1)//随机增加括号
                    {
                        k=r.nextInt(c-1);
                        if(k==0)//括号由开头起
                        {
                            ch=String.valueOf('(');
                            ch+=String.valueOf(a);
                            h=r.nextInt(c-1)+k+1;
                            while(h>c){h=r.nextInt(c-1)+k+1;}
                        }
                        if(k>0)//括号在式中 
                        {
                            ch=String.valueOf(a);
                            h=r.nextInt(c)+k+1;
                            while(h>c){h=r.nextInt(c)+k+1;}
                        }
                    }
                    else{ch=String.valueOf(a);}
                }
                else{ch=String.valueOf(a);}
                for(int i=0;i<c;i++) 
                {
                    if(cc==0) {sz=r.nextInt(2);}
                    else {sz=r.nextInt(4);}//乘除法
                    ch+=String.valueOf(d[sz]);
                    if(k>0&&i==k-1){ch+=String.valueOf('(');}
                    b[i]=r.nextInt(max)+min;
                    while(b[i]>max){b[i]=r.nextInt(max)+min;}
                    if(d[sz]=='/'&&b[i]==0){while(b[i]==0||b[i]>max) {b[i]=r.nextInt(max)+min;}}//防止0为被除数
                    ch+=String.valueOf(b[i]);
                    if(i==h-1){ch+=String.valueOf(')');}//补“)”
                }
            }
            return ch;//以字符串形式定义算式
        }
        public static void TM()//总题
        {
            int j=0;
            String[] s=new String[n];
            while(j<n)//制作题目
            {
                s[j]=Tm();
                if(PC(j,s)==0)//重复
                {
                    System.out.println((j+1)+""+s[j]+"=");
                    j++;     
                }
            }
            ScriptEngine se=new ScriptEngineManager().getEngineByName("JavaScript");
            double[] sum=new double[n];
            for(int i=0;i<n;i++)
            {
                try{sum[i]=(Double)se.eval(s[i]);} 
                catch(ScriptException e){e.printStackTrace();}
            }//字符串转算式计算结果
            DT(s,sum);//答题
        }
        public static int PC(int j,String[] s)//判重
        {
            for(int i=0;i<j;i++){if(s[i].equals(s[j])) {return 1;}}
            return 0;
        }
        public static void DT(String[] s,double[] sum)//答题
        {
            int min,yd=0,w=0,yn;
            double[] da=new double[n];//回答
            double[] Da=new double[n];
            double[] Sum=new double[n];
            String[] Cw=new String[n];//错误题号
            System.out.println( "请设置答题时间(分钟)");
            min=sc.nextInt();
            System.out.println( "开始答题 !");
            long startTime=System.currentTimeMillis();
            while((System.currentTimeMillis()-startTime)/1000<=min*60)
            {
                da[yd]=sc.nextDouble();
                yd++;
                if(yd==n){break;}
            }
            if(yd!=n){System.out.println( "时间到!答题结束!");}
            for(int i=0;i<n;i++)
            {
                if(da[i]!=sum[i])//判断答题对错
                {
                    Cw[w]=s[i];
                    Da[w]=da[i];
                    Sum[w]=sum[i];
                    w++;
                }
            }
            double cw=(double)(n-w)*100/n;//正确率
            System.out.println( "你的正确率为 :" +cw+"%");
            System.out.println( "你的错题如下 :");//错题
            for(int i=0;i<w;i++){System.out.println((i+1)+""+Cw[i]+"="+Da[i]+" X"+" 正确答案:"+Sum[i]);}
            while(true)
            {
                System.out.println( "你想重练错题吗?是请输入1,否请输入0:");
                yn=sc.nextInt();
                if(yn==0){break;}
                for(int i=0;i<w;i++)
                {
                    System.out.println((i+1)+""+Cw[i]+"=");
                    da[i]=sc.nextDouble();
                    if(da[i]!=Sum[i]){System.out.println( "X 正确答案为:"+Sum[i]);}
                }
            }
        }
    }

    此代码实现了不同年级题目的定制(包括扩号)、限时大题和判题等。还差错题本尚未完成。(此段代码打算将之前的”错题“部分代码重写,思路已有,框架也已有,只差写……)

    今天完成了动手动脑部分。(四则运算是昨天上课时的半成品,今天才发……)

    问题无。

    明天完成动手动脑作业三。

  • 相关阅读:
    React中 checkbox 与 label 标签的搭配
    HTML5 FileReader对象
    HTML5 FormData 模拟表单控件 支持异步上传二进制文件 移动端
    Nginx 反向代理
    HTML5触摸事件
    利用React遍历数组,并且用数组的元素生成<li>arrItem</li>标签组
    ECMAScript5 [].reduce()
    E:Unable to locate package
    mv和cp命令
    Error response from daemon: Conflict. The container name "xinying_face" is already in use by container
  • 原文地址:https://www.cnblogs.com/hfy717/p/13779952.html
Copyright © 2011-2022 走看看