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 (二柱升级版)的更多相关文章

  1. 日常Java(测试 (二柱)修改版)2021/9/22

    题目: 一家软件公司程序员二柱的小孩上了小学二年级,老师让家长每天出30道四则运算题目给小学生做. 二柱一下打印出好多份不同的题目,让孩子做了.老师看了作业之后,对二柱赞许有加.别的老师闻讯, 问二柱 ...

  2. 日常Java 2021/10/26

    HashSet基于HashMap来实现的,是一个不允许有重复元素的集合.HashSet 允许有null 值. HashSet是无序的,即不会记录插入的顺序. HashSet不是线程安全的,如果多个线程 ...

  3. 日常Java 2021/11/18

    用idea实现Javaweb登录页面 <%-- Created by IntelliJ IDEA. User: Tefuir Date: 2021/11/18 Time: 18:14 To ch ...

  4. 日常Java 2021/9/23

    练习使用Math.random函数,以及JOptionPane.showMessageDialog(null,"字符串","Results",JOptionPa ...

  5. 日常Java 2021/11/21

    Java文档注释 Java支持三种注释方式.前两种分别是Ⅱ和/产*,第三种被称作说明注释,它以产开始,以*I结束.说明注释允许你在程序中嵌入关于程序的信息.你可以使用javadoc工具软件来生成信息, ...

  6. 日常Java 2021/11/17

    应用程序转换成Applet 将图形化的Java应用程序(是指,使用AWT的应用程序和使用java程序启动器启动的程序)转换成嵌入在web页面里的applet是很简单的.下面是将应用程序转换成.Appl ...

  7. 日常Java 2021/11/15

    Applet类 每一个Applet都是java.applet Applet类的子类,基础的Applet类提供了供衍生类调用的方法,以此来得到浏览器上下文的信息和服务.这些方法做了如下事情: 得到App ...

  8. 日常Java 2021/11/13

    Java Applet基础 Applet是一种Java程序.它一般运行在支持Java的Web浏览器内.因为它有完整的Java API支持,所以Applet是一个全功能的Java应用程序.如下所示是独立 ...

  9. 日常Java 2021/11/9

    线程的优先级 每一个Java线程都有一个优先级,这样有助于操作系统确定线程的调度顺序.Java线程的优先级是一个整数,其取值范围是1(Thread.MIN_PRIORITY ) -10 (Thread ...

随机推荐

  1. sql server 如何跟更新拼接的数据(cast用法)

    我们在实际中会做如下图的连接 执行以后这个连接就会报错了,如下图所示   然后我们用cast将数字转换为字符串在连接,如下图所示     这次连接的结果就没问题了,如下图所示     最后如果两个数字 ...

  2. 使用XAMPP创建Mysql数据库 要想在本地连接需要配置一下my.ini文件 配置如下:

    # Example MySQL config file for small systems. # # This is for a system with little memory (<= 64 ...

  3. 解读Java8的Thread源码

    1.创建的一个无参的Thread对象,默认会有一个线程名,以Thread-开头,从0开始计数,采用了一个static修饰的int变量,当对象初始化一次时一直存放在jvm方法区中 2.构造Thread的 ...

  4. MyCat读写分离+MySql主从(一主一从)

    数据库一直在项目担当着一位核心的角色,是所有项目结构中的底层,说白了,我们程序员进行项目开发都是在和数据打交道,而数据都是保存在数据库中,如mysql.oracle.postgresql等等,如果一个 ...

  5. 12组-Alpha冲刺-3/6

    一.基本情况 队名:字节不跳动 组长博客:https://www.cnblogs.com/147258369k/p/15546442.html 小组人数:10人 二.冲刺概况汇报 侯钦凯 过去两天完成 ...

  6. c#.net 实现短网址的简单方法

    短网址,现在很流行了,本文为大家介绍用c#.net实现短网址的方法,有兴趣的朋友,不妨参考下. 短网址,也被叫做网址缩短.网址压缩选装. 这里我们用一个例子来说明其原理吧,假如您带了一包东西去超市购物 ...

  7. dotNET5的MVC页面传值方式总结

    本文大致讲解mvc前后端的传值方式,包括control向view.view向control.以及action向action. 一.经典回顾 二.Controller向View传值 1. ViewBag ...

  8. 菜鸡的Java笔记 第二十二 - java 对象多态性

    本次只是围绕着多态性的概念来进行讲解,但是所讲解的代码与实际的开发几乎没有关系,而且多态一定是在继承性的基础上才可以操作的,        而本次将使用类继承的关系来描述多态的性质,实际的开发中不会出 ...

  9. 从零搭建vsftpd

    先吐槽一下这个工具,配置繁琐,限制规则复杂,报错信息不够详细,学起来吃力. 准备工作 [root@vsftp-server ~]# mkdir /data/ #创建ftp目录 [root@vsftp- ...

  10. [at4631]Jewels

    如果要选某颜色,必然会选该颜色最大的两个,那么不妨将这两个宝石权值修改为两者的平均数,显然不影响两者的和,也即不影响答案 接下来,将所有宝石按权值从大到小排序,并在权值相同时按颜色编号从小到大(使颜色 ...