2023年9月27号
今天将该任务完全完成了,其代码如下。
工具类:
import java.io.*; import java.util.ArrayList; import java.util.Random; import java.util.Scanner; public class tools { public static void menu(int a,int b){ System.out.println("*****四则运算练习*****"); System.out.println("***1.二年级四则运算***"); System.out.println("***2.三年级四则运算***"); System.out.println("***3.四年级四则运算***"); System.out.println("***4.退出系统********"); System.out.println("*******************"); int tclass=tools.getTextClass();//年级(1代表二年级,渐增) switch (tclass) { case 1: Two two = new Two(); two.OpenText(a,b); break; case 2: Three three = new Three(); three.OpenText(a,b); break; case 3: Four four = new Four(); four.OpenText(a,b); break; case 4: System.out.println("期待下次见面!"); break; } } public static char getOperator(){ char operator = 0; Random ran = new Random(); int i = ran.nextInt(4); switch(i){ case 0: operator = '+'; break; case 1: operator = '-'; break; case 2: operator = '*'; break; case 3: operator = '/'; break; } return operator; }//获得运算符 public static int getNumber(int max){ int number = 0; Random ran = new Random(); number = ran.nextInt(max+1); return number; }//获得随机数 //根据运算符个数随机得到子节点个数 public static boolean[] getChildPlace(int num){ int d = 0; int size = 0, j=1; while(num >= (int)Math.pow(2, j)){ j++; } d = (int)Math.pow(2, j) - 1 - num; size = (int)Math.pow(2, j-1); boolean[] k = new boolean[size]; for(int i = 0; i < size; i++){ k[i] = true; } for(int i = 0; i < d; i++){ Random ran = new Random(); int f = ran.nextInt(size); while(k[f] == false) { f = ran.nextInt(size); } k[f] = false; } return k; } public static int getTextClass(){ Scanner sc=new Scanner(System.in); System.out.print("请选择:"); int num= sc.nextInt(); return num; }//选择年级 public static int judgeTextdanger(){ Scanner sc=new Scanner(System.in); System.out.print("请选择是否带乘除(1.是 2.否):"); int tb=sc.nextInt(); return tb; }//判断是否带乘除 public static int judgeTextKuo(){ Scanner sc=new Scanner(System.in); System.out.print("请选择是否带括号(1.是 2.否):"); int tb=sc.nextInt(); return tb; }//判断是否带括号(四年级) public static int getTextNum(){ Scanner sc=new Scanner(System.in); System.out.print("请输入做题数量:"); int num= sc.nextInt(); return num; }//获得做题数量 public static int getTextMax(int k){//k为几年级 Scanner sc=new Scanner(System.in); if(k==2) System.out.print("请选择数值范围(1-100):"); else if(k==3) System.out.print("请选择数值范围(1-1000):"); else System.out.print("请选择数值范围(1-1000):"); int tb=sc.nextInt(); return tb; }//获得操作数范围 public static int getTextOperator(int k){//k为年级,3/4 Scanner sc=new Scanner(System.in); if(k==3) System.out.print("请选择操作数(2-4):"); else System.out.print("请选择操作数(2-5):"); int tb=sc.nextInt(); return tb; }//获得操作数的数量 public static void output(int n,int num){ double ret=n*100/num; System.out.println("错题数:"+(num-n)); System.out.println("正确率:"+ret+"%"); } //存入文件操作 public static void outputText(int i,String s,int k){ //写入文件操作 File file1=new File("src\\练习册.txt");//在该类的位置创建一个新文件 File file2=new File("src\\错题本.txt");//在该类的位置创建一个新文件 FileWriter f=null;//创建文件写入对象 BufferedWriter f1=null;//创建字符流写入对象 try { //这里把文件写入对象和字符流写入对象分开写了 if(k==0) { if (i == 0) { f = new FileWriter("src\\练习册.txt"); } else { f = new FileWriter("src\\练习册.txt", true);//创建一个名为练习册.txt的文件 } f1 = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file1, true))); //通过循环遍历上面的String 数组中的元素 f.write(s + " "); if (i % 3 == 0) { f1.newLine(); } }else{ f = new FileWriter("src\\错题本.txt", true);//创建一个名为错题本.txt的文件 f1 = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file2, true))); //通过循环遍历上面的String 数组中的元素 f.write(s+" "); f1.newLine(); } } catch (Exception e) { // TODO: handle exception }finally {//如果没有catch 异常,程序最终会执行到这里 try { f1.close(); f.close();//关闭文件 } catch (Exception e2) { // TODO: handle exception } } } //读取文件操作 public static void inputText(ArrayList<String> problem,ArrayList<String> result,int a,int b){ ArrayList<String> results=new ArrayList<String>(); String filePath = "src\\练习册.txt"; FileInputStream fin=null; String strTmp = ""; System.out.println("答题情况如下:"); try { fin = new FileInputStream(filePath); InputStreamReader reader = new InputStreamReader(fin); BufferedReader buffReader = new BufferedReader(reader); while ((strTmp = buffReader.readLine()) != null) { System.out.println(strTmp); results.add(strTmp); } buffReader.close(); } catch (Exception e) { // TODO: handle exception } int x=0,y=0; String ts=""; boolean flsh=false; for(int j=0;j<results.size();j++){ char t[]=results.get(j).toCharArray(); for(int k=0;k<t.length;k++){ if(t[k]=='='){ flsh=true; } else if (t[k]==' ') { flsh=false; if(!ts.equals(result.get(x))){ y++; tools.outputText(0,problem.get(x),1); } ts=""; x++; }else if(flsh){ ts+=t[k]; } } } double rat=(double)(result.size()+a-y-b)/(result.size()+a); tools.outputText(0,"今日正答率:"+(rat*100)+"%",1); Displayerror(result.size()+a,y+b); } //判断是否完成题目 public static int judgeFinish(){ Scanner sc=new Scanner(System.in); System.out.print("是否在文件内完成题目(1.是/2.否):"); int k=sc.nextInt(); return k; } //还未写///////// public static void Displayerror(int a,int b){ Scanner sc=new Scanner(System.in); System.out.println("错题已存入错题本,请选择是否进行下一套试题(1.是/2.否):"); int k=sc.nextInt(); if(k==1){ tools.menu(a,b); }else{ System.out.println("期待下次见面!"); } }//查看错题本(显示正答率和错题,并选择是否对错题二次答题) }
主函数:
import java.util.ArrayList; public class Main { public static void main(String[] args) { tools.menu(0,0); } }
二,三,四年级:
import java.io.*; import java.util.ArrayList; import java.util.Random; import java.util.Scanner; public class Two { //题目 ArrayList<String> problem=new ArrayList<String>(); //正确答案 ArrayList<String> results=new ArrayList<String>(); public void OpenText(int a,int b) { Random ra = new Random(); Scanner sc=new Scanner(System.in); int textnum=tools.getTextNum();//题目数量 int maxnum=tools.getTextMax(2); boolean jud1=true;//是否带乘除 if(tools.judgeTextdanger()==1) jud1=true; else jud1=false; int n=0,num=0;//n为符合运算法则的式子,num为作对的题目数 doTree dTree; for(int i = 0; i < textnum; i++) { dTree = new doTree(1); dTree.CreateTree(maxnum); String result = dTree.TestProblem(); results.add(result); System.out.println(dTree.toString() + "="); String s=dTree.toString() + "="; problem.add(s); //写入文件操作 tools.outputText(i,s,0); } int bool=tools.judgeFinish(); if(bool==1) { //读取文件操作 tools.inputText(problem,results,a,b); } //tools.output(maxnum,num); } }
import java.util.ArrayList; import java.util.Random;
import java.util.Scanner; public class Three { //题目 ArrayList<String> problem=new ArrayList<String>(); //正确答案 ArrayList<String> results=new ArrayList<String>(); //用户输入答案 ArrayList<String> results2=new ArrayList<String>(); public void OpenText(int a,int b){ Random ra = new Random(); Scanner sc=new Scanner(System.in); int textnum=tools.getTextNum();//题目数量 int opernum=tools.getTextOperator(3);//获得操作数数量 int maxnum=tools.getTextMax(3);//获得最大范围 boolean jud1=true;//是否带乘除 if(tools.judgeTextdanger()==1) jud1=true; else jud1=false; int n=0,num=0;//n为符合运算法则的式子,num为作对的题目数 doTree dTree; for(int i = 0; i < textnum; i++) { dTree = new doTree(opernum-1); dTree.CreateTree(maxnum); String result = dTree.TestProblem(); results.add(result); System.out.println(dTree.toString() + "="); String s=dTree.toString() + "="; problem.add(s); //写入文件操作 tools.outputText(i,s,0); } //读取文件操作 int bool=tools.judgeFinish(); if(bool==1) { //读取文件操作 tools.inputText(problem,results,a,b); } //tools.output(maxnum,num); } }
import java.io.*; import java.util.ArrayList; import java.util.Random; import java.util.Scanner; public class Four { //题目 ArrayList<String> problem=new ArrayList<String>(); //正确答案 ArrayList<String> results=new ArrayList<String>(); public void OpenText(int a,int b){ Random ra = new Random(); Scanner sc=new Scanner(System.in); int textnum=tools.getTextNum();//题目数量 int opernum=tools.getTextOperator(4);//获得操作数数量 int maxnum=tools.getTextMax(4);//获得最大范围 boolean jud1=true;//是否带乘除 if(tools.judgeTextdanger()==1) jud1=true; else jud1=false; int n=0,num=0;//n为符合运算法则的式子,num为作对的题目数 doTree dTree; for(int i = 0; i < textnum; i++) { dTree = new doTree(opernum-1); dTree.CreateTree(maxnum); String result = dTree.TestProblem(); results.add(result); System.out.println(dTree.toString() + "="); String s=dTree.toString() + "="; problem.add(s); //写入文件操作 tools.outputText(i,s,0); } //读取文件操作 int bool=tools.judgeFinish(); if(bool==1) { //读取文件操作 tools.inputText(problem,results,a,b); } //tools.output(maxnum,num); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)