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. 云效Flow如何实现阿里云ECS多环境发布

    一.背景 云效Flow基于标签功能实现阿里云ECS多环境发布,在软件开发和部署过程中,我们的软件往往需要在不同的运行环境中运行,例如:开发人员本地开发环境.测试团队的测试环境.还有类生产环境和生产环境 ...

  2. Java并发:重入锁 ReentrantLock(一)

    ReentrantLock 是一种可重入的互斥锁,它不像 synchronized关键字一样支持隐式的重进入,但能够使一个线程(不同的方法)重复对资源的重复加锁而不受阻塞. ReentrantLock ...

  3. Python 模块 itertools

    python 2.6 引入了itertools模块,使得排列组合的实现非常简单: import itertools 有序排列:e.g., 4个数内选2个排列: >>> print l ...

  4. 『学了就忘』Linux基础命令 — 32、压缩和解压缩相关命令

    目录 1.".zip"格式压缩 2.".gz"格式压缩 3.".bz2"格式压缩 4.".tar"格式打包 5.打包和压 ...

  5. Mysql - 整数类型的存储字节数和范围

    MySQL 整数类型的存储字节数和范围 type 存储字节数 有符号最小值 无符号最小值 有符号最大值 无符号最大值 TINYINT 1 -128 0 127 255 SMALLINT 2 -3276 ...

  6. windows 下 redis服务经常自动关闭

    记一次线上服务器redis 经常掉线的问题 环境: windows service 2019, redis, java8, 由于服务器资源有限, 项目的数据库oracle, 缓存数据库redis和we ...

  7. Java学习(十六)

    今天先学了文本标签 <p> <strong>永远不要相信诺克萨斯人的血条!</strong><!--表示一段内容的重要性--> <br /> ...

  8. Python 随机数,数学

    数学相关的库        import math        向上取整:            print(math.ceil(18.9))        向下取整:            pri ...

  9. 【linux系统】命令学习(四)统计命令

    sort 排序 -b 忽略开头的空白符 -f 将小写字母看做为大写字母 -h 根据存储容量排序(kb mb hb )从小到大 -n 按数字排序 -o 把结果写入文件 -r 以相反的顺序来排序 -t 指 ...

  10. AnnotationConfigApplicationContext(1)之初始化Scanner和Reader

    AnnotationConfigApplicationContext(1)初始化Scanner和Reader 我们以AnnotationConfigApplicationContext为起点来探究Sp ...