四则运算升级版
作者:@kuaiquxie
作者的github:https://github.com/bitebita
本文为作者原创,如需转载,请注明出处:https://www.cnblogs.com/dzwj/p/15345969.html
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);
}
}
}
程序判断除法不是很准确
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 上周热点回顾(3.3-3.9)
· AI 智能体引爆开源社区「GitHub 热点速览」