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. sonar-project.propertie分析参数

    SonarScanner 是当您的构建系统没有特定扫描仪时使用的扫描仪. 配置您的项目 在你的项目根目录中创建一个名为的配置文件 sonar-project.properties # must be ...

  2. ClickHouse实战

    1.概述 最近有被留言关于ClickHouse的使用问题,今天笔者将为大家分享一下ClickHouse的安装细节和使用方法. 2.内容 首先安装环境如下所示: Linux:CentOS7 ClickH ...

  3. 手把手教你学Dapr - 3. 使用Dapr运行第一个.Net程序

    上一篇:手把手教你学Dapr - 2. 必须知道的概念 注意: 文章中提到的命令行工具即是Windows Terminal/PowerShell/cmd其中的一个,推荐使用Windows Termin ...

  4. AtCoder Beginner Contest 210题解

    A B 过水,略... C 统计长度为k的区间的最多本质不同的数.用尺取法维护下左右指针就可以了.调了许久的原因是更新答案时出现了问题. 当我移动指针时,我们应该移动一个就更新一个,而不是将移动与更新 ...

  5. cf18B Platforms(仔细谨慎题)

    题意: In one one-dimensional world there are n platforms. Platform with index k (platforms are numbere ...

  6. cf14D Two Paths(树的直径)

    题意: N个点构成一棵树.树枝的长度都是1. 在当中找两条不相交[没有公共点]的路,使得二者长度之积最大. (2 ≤ n ≤ 200) 思路: 一开始思路好麻烦,好麻烦,好麻烦,,,,,,,而且WA, ...

  7. 修改linux 两种时间的方法

    1,整理了一下怎么修改linux 两种时间的方法. 硬件时间:hwclock 或者clock,设置的方法是 hwclock --set --date="05/12/2018 12:30:50 ...

  8. Mysql教程:(四)连接查询

    连接查询 1.左连接查询: mysql> select stu.*,sc.*,maths+sc.chinese+sc.english from student stu left join sco ...

  9. google浏览器设置检查元素显示框位置

  10. FZU ICPC 2020 寒假训练 5 —— 排序

    P1177 [模板]快速排序 题目描述 利用快速排序算法将读入的 N 个数从小到大排序后输出.快速排序是信息学竞赛的必备算法之一.对于快速排序不是很了解的同学可以自行上网查询相关资料,掌握后独立完成. ...