日常Java 2021/9/26 (二柱升级版)
package m;
import java.util.Scanner;
import java.util.Random;
public class di_er {
	    static int number=1000,i=0;
	    static int []a1=new int[number];
	    static int []a2=new int[number];
	    static double []sum=new double[number];//存储小数
	    
	    static int []s=new int[number];//错题序号
	    static int []operator=new int[number]; //运算符
	    
	    static int questionNumber=0;//题目个数
	    static int operatorNumber=0;//操作数个数
	    static int min=0;//最小值
	    static int max=0;//最大值
	    static int right=0;//正确题目
	    static int wrong=0;//错误题目
	    static Scanner in=new Scanner(System.in);
	    
	    /*判断是否重复*/
	    public static boolean judge(int i) {
	        boolean y=false;
	        if(i!=0) {
	            int k=i;
	            for(int j=i;j>=0;j--) {
	                if(a1[k]==a1[j]&&a2[k]==a2[j])
	                    y=true;
	                else
	                    y=false;
	            }
	        }
	        return y;
	    }
/*生成一个随机数*/
	    public static void birth() {
	        a1[i]=min+(int)(Math.random()*((max-min)+1));
	        a2[i]=min+(int)(Math.random()*((max-min)+1));
}
/*出题*/
	    public static void setQuestion() {
	        System.out.println("请输入题目的个数:");
	        questionNumber=in.nextInt();
	        System.out.println("请输入操作数的个数:");
	        operatorNumber=in.nextInt();
	        System.out.println("请输入操作数取值范围的最小值:");
	        min=in.nextInt();
	        System.out.println("请输入操作数取值范围的最大值:");
	        max=in.nextInt();
	    }
/*回答问题*/
	    public static void replyQuestion() {
	        
	        System.out.println("请同学现在进行答题!(除法请保留3位小数)");
	        
	        for(int i=0;i<questionNumber;i++) {
	            sum[i]=in.nextDouble();
	        }
	        
	        System.out.println("*************答题结束!*************");
	        
	    }
/*判断结果是否正确*/
	    public static void judgeRightOrWrong() {
	        int r=0,w=0;
	        for(int i=0;i<questionNumber;i++) {
	            switch(operator[i]) {
	                case 0:{
	                    if((a1[i]+a2[i]-sum[i])<1e-3)
	                        r++;
	                    else {
	                        s[w]=i;
	                        w++;
	                    }
	                    right=r;
	                    wrong=w;
	                    break;
	                }
	                case 1:{
	                    if((a1[i]-a2[i]-sum[i])<1e-3)
	                        r++;
	                    else {
	                        w++;
	                        s[w]=i;
	                    }
	                    right=r;
	                    wrong=w;
	                    break;
	                }
	                case 2:{
	                    if((a1[i]*a2[i]-sum[i])<1e-3)
	                        r++;
	                    else {
	                        w++;
	                        s[w]=i;
	                    }
	                    right=r;
	                    wrong=w;
	                    break;
	                }
	                case 3:{
	                    if(((double)a1[i]/a2[i]-sum[i])<1e-3)
	                        r++;
	                    else {
	                        w++;
	                        s[w]=i;
	                    }
	                    right=r;
	                    wrong=w;
	                    break;
	                }
}
	            right=r;
	            wrong=w;
	        }
	    }
/*错题集*/
	    public static void wrongQuestion() {
	        
	        System.out.println("错题集:");
	        
	        String M="1";
	        for(int i=0;i<wrong;i++) {
	            int j=s[i];
	            if(operator[j]==0)
	                M="+";
	            if(operator[j]==1)
	                M="-";
	            if(operator[j]==2)
	                M="*";
	            if(operator[j]==3)
	                M="/";
	            System.out.println(a1[j]+M+a2[j]+"="+sum[j]);
	        }
	    }
	    
	    /*主函数*/
	    public static void main(String []args) {
boolean flag=true;
	        int s1;
	        String m="s";
	        setQuestion();
for(i=0;i<questionNumber;i++) {
	            birth();
	            s1=(int)(Math.random()*4);
	            flag=judge(i);
	            if(flag) {
	                birth();
	            }
	            if(s1==0) {
	                m="+";
	                operator[i]=0;
	            }
	            if(s1==1) {
	                m="-";
	                operator[i]=1;
	            }
	            if(s1==2) {
	                if(a1[i]*a2[i]<100) {
	                    m="*";
	                    operator[i]=2;
	                }
	                else {
	                    m="*";
	                    birth();
	                }
	            }
	            if(s1==3) {
	                m="/";
	                operator[i]=3;
	            }
	            System.out.println(a1[i]+m+a2[i]+"=");
	        }
	        
	        replyQuestion();
	        judgeRightOrWrong();
	        System.out.println("正确个数:"+right);
	        System.out.println("错误个数:"+wrong);
	        System.out.println("正确率:"+((double)right/questionNumber)*100+"%");
	        System.out.println("错误率:"+((double)wrong/questionNumber)*100+"%");
	        wrongQuestion();
	        
	        System.out.println("选择yes/no对错题是否进行重做?");
	        String str=in.next();
	        String str1="yes";
	        String str2="no";
	        if(str.equals(str1)) {
while(wrong!=0) {
	                String M="1";
	                for(int i=0;i<wrong;i++) {
	                    int j=s[i];
	                    if(operator[j]==0)
	                        M="+";
	                    if(operator[j]==1)
	                        M="-";
	                    if(operator[j]==2)
	                        M="*";
	                    if(operator[j]==3)
	                        M="/";
	                    System.out.println(a1[j]+M+a2[j]+"=");
	                    System.out.println("请重做:");
	                    sum[j]=in.nextDouble();
	                }
	                judgeRightOrWrong();
	            }
	            if(wrong==0)
	                System.out.println("全部正确,答题结束");
	        }
if(str.equals(str2)) {
	            System.out.println("答题结束");
	            System.exit(0);
	        }
	        
	    }
}

程序判断除法不是很准确
日常Java 2021/9/26 (二柱升级版)的更多相关文章
- 日常Java(测试 (二柱)修改版)2021/9/22
		
题目: 一家软件公司程序员二柱的小孩上了小学二年级,老师让家长每天出30道四则运算题目给小学生做. 二柱一下打印出好多份不同的题目,让孩子做了.老师看了作业之后,对二柱赞许有加.别的老师闻讯, 问二柱 ...
 - 日常Java 2021/10/26
		
HashSet基于HashMap来实现的,是一个不允许有重复元素的集合.HashSet 允许有null 值. HashSet是无序的,即不会记录插入的顺序. HashSet不是线程安全的,如果多个线程 ...
 - 日常Java 2021/11/18
		
用idea实现Javaweb登录页面 <%-- Created by IntelliJ IDEA. User: Tefuir Date: 2021/11/18 Time: 18:14 To ch ...
 - 日常Java 2021/9/23
		
练习使用Math.random函数,以及JOptionPane.showMessageDialog(null,"字符串","Results",JOptionPa ...
 - 日常Java 2021/11/21
		
Java文档注释 Java支持三种注释方式.前两种分别是Ⅱ和/产*,第三种被称作说明注释,它以产开始,以*I结束.说明注释允许你在程序中嵌入关于程序的信息.你可以使用javadoc工具软件来生成信息, ...
 - 日常Java 2021/11/17
		
应用程序转换成Applet 将图形化的Java应用程序(是指,使用AWT的应用程序和使用java程序启动器启动的程序)转换成嵌入在web页面里的applet是很简单的.下面是将应用程序转换成.Appl ...
 - 日常Java 2021/11/15
		
Applet类 每一个Applet都是java.applet Applet类的子类,基础的Applet类提供了供衍生类调用的方法,以此来得到浏览器上下文的信息和服务.这些方法做了如下事情: 得到App ...
 - 日常Java 2021/11/13
		
Java Applet基础 Applet是一种Java程序.它一般运行在支持Java的Web浏览器内.因为它有完整的Java API支持,所以Applet是一个全功能的Java应用程序.如下所示是独立 ...
 - 日常Java 2021/11/9
		
线程的优先级 每一个Java线程都有一个优先级,这样有助于操作系统确定线程的调度顺序.Java线程的优先级是一个整数,其取值范围是1(Thread.MIN_PRIORITY ) -10 (Thread ...
 
随机推荐
- zabbix 报警发送企业威信
			
1.组册企业微信,创建应用 2.下载脚本文件: https://raw.githubusercontent.com/OneOaaS/weixin-alert/master/weixin_linux_a ...
 - 利用Wireshark 解密HTTPS流量
			
在我之前的一篇文章中已经介绍了一种解密HTTPS流量的一种方法,大致方法就是客户端手动信任中间人,然后中间人重新封包SSL流量. 文章地址: http://professor.blog.51cto.c ...
 - SkyWalking部署及.Net Core简单使用
			
SkyWalking官方网站非常详细,以下只是本人学习过程的整理 一.SkyWalking简介 1.概念 SkyWalking是分布式系统的应用程序性能监视工具,专为微服务.云原生架构而设计 SkyW ...
 - .Net Core微服务——网关(2):ocelot集成consul
			
有consul基础的都知道,consul可以发现新增的服务,剔除掉无效的服务,赋予应用自动伸缩的能力.而ocelot如果集成了consul,那ocelot也能拥有这些能力,还可以自主选择负载均衡策略, ...
 - flower 指定app
			
flower 指定app # tasks.py from celery import Celery celery = Celery(broker="amqp://", backen ...
 - ORACLE,mysql中替换like的函数
			
数据库中存储了海量的数据,当查询时使用like,速度明显变慢.我在做项目时,发现使用内部函数INSTR,代替传统的LIKE方式查询,并且速度更快. INSTR()函数返回字符串中子字符串第一次出现的位 ...
 - c++学习笔记(十一)
			
函数重载(overloading) 概念 重载函数是函数的一种特殊情况,为方便使用,C++允许在同一范围中声明几个功能类似的同名函数,但是这些同名函数的形式参数(指参数的个数.类型或者顺序)必须不同, ...
 - [loj2049]网络
			
考虑整体二分,假设二分到区间$[l,r]$,即要对若干个询问,判断这些询问的答案与$mid=\lfloor\frac{l+r}{2}\rfloor$的关系 根据题意,答案$\le mid$等价于重要度 ...
 - [hdu4747]Mex
			
首先计算出以1为左端点的所有区间的mex,考虑删除左端点仍然维护这个序列:设当前删除点下一次出现在y,y~n的mex不变,从左端点到y的点中大于删除值的点要变成删除值,因为这个是不断递增的,所以是一段 ...
 - 提升AI智能化水平,打造智慧新体验
			
内容来源:华为开发者大会2021 HMS Core 6 AI技术论坛,主题演讲<提升AI智能化水平,打造智慧新体验>. 演讲嘉宾:沈波,华为消费者AI与智慧全场景ML Kit产品总监 今天 ...