用时两个小时24分钟
题目要求我们做的事情分别是5项
1.首先要求我们做一个可以打印100道题的程序
2.把这一百道题写入一个txt文件
3.在控制台答题
4.把控制台的答题结构输出到文件中
5统计一共做对了多少道题目,汇总
我们一项一项的看
首先是第一项
难点有:随机数,要用相应的函数来解决,需要网上求助一下
而让我感到难度比较大的是如何记录算式以及结果
这很重要,会影响到后面的文件记录与输出
记录方式我这里是用的是数组
当然这也会影响到后面的汇总,我们一会儿再说
2。读写
其实读写操作很早以前就让使用了,可是我一直没学会
这一次算是拔苗助长强行掌握了
1.FileWriter fwas = null;
2.fwas = new FileWriter("answer.txt")
3.for(int i = 0;i<100;i++)
{fw.write(str[i]+"
");}
我们来看这三步的内容
定义变量,创建文件,写入文件.....
当然,读写法有很多,百度找到了一些
read():一个一个字节的读 read(byte[] buf):先把字节存入到缓冲区字节数组中,一下读一个数组
要是使用缓冲区的话就要换一种写法
之前总喜欢在百度上截取模板
可真正重要的不过这三句话。。。。。。而且网上的读写流运算给我了我一种错误的刻板印象
读写很长,很麻烦,然而并不是这样
然后是在控制台答题,需要的就是控制台写入程序
汇总的时候要去考略怎么进行匹配内容
这很要求前面的储存方式,如果之前的储存方式不够模式化,简单化的话
这里的问题是非常难解决的
这里如果使用算式和答案分开的字符串形式的话,后面的匹配是非常简单的
用单一循环去做边读,别写,边输入,单一循环去解决
代码如图:
1 import java.io.BufferedReader;//提供通用的缓冲方式文本读取
2 import java.io.File;//使用文件
3 import java.io.FileInputStream;//通过打开一个到实际文件的连接来创建一个FileInputStream
4 import java.io.FileWriter;//控制文件的写入
5 import java.io.IOException;//异常处理
6 import java.io.InputStreamReader;//接受控制台输入的参数
7 import java.util.Random;//控制随机数的类
8 import java.util.Scanner;//控制台控制写入的类
9
10 public class ClassTest {
11
12 //方法一:随机生成100道题目
13 public void scanf() throws IOException
14 {//函数里有文件的读取时常常需要throws一下
15 String str[]=new String[100];
16 String answer[]= new String[100];//使用两个数组去记录一下分别记录算式和答案,且数组的组成单元是字符串
17 int n = 0;
18 int x,y,m,mm;//一个算式需要加减乘除两个数字加上
19 Random random = new Random(System.currentTimeMillis());//System.currentTimeMillis()可以获得当前时间,随机数
20 String ch[] = new String[] {"-","+","/","*"};
21 for(int i = 1;i<=10;i++) {
22
23 x = random.nextInt(100)+1;
24 y = random.nextInt(100)+1;
25 m = random.nextInt(20);
26 mm = random.nextInt(4);
27 if(ch[mm]=="*"){//随机出符号来
28 str[n]= x+"*"+y+"=";//记录算式
29 answer[n]=x*y+"";}//记录答案
30 if(ch[mm]=="/"){//用这种方法把所有的算式都可以表达出来,在进行记录,这样可以方便读入
31 str[n]= x*m+ch[mm]+x+"=";
32 answer[n]=m+"";
33 }
34 if(ch[mm]=="+"){
35 str[n] = x+"+"+y+"=";
36 answer[n]=x+y+"";
37 }
38 if(ch[mm]=="-")//这里需要判断一下大小,因为是减法,要排除负数的存在,之前的除法其实也应该判断一下,是否会出现零的情况。
39 {
40 if(x>y)
41 str[n]= x+"-"+y+"=";
42 else
43 str[n]= y+"-"+x+"=";
44 answer[n]=Math.abs(x-y)+"";//用绝对值来修改减法的得数
45 }
46 n++;//数组的计数
47 }
48 //将题目输入test.txt文本中
49 FileWriter fw = null;//文件流这里也需要变量的声明
50 try {//捕捉一下错误
51 //创建字符输出流
52 fw = new FileWriter("test.txt");//创建相应的TXT文件
53 for(int i = 0;i<100;i++)
54 {fw.write(str[i]+"
");}//用write函数进行循环输入
55 } catch (IOException ioe) {
56 ioe.printStackTrace();
57 } finally {
58 //使用finally块来关闭文件输出流
59 if (fw != null) {
60 fw.close();
61 }
62 }
63 //将答案添加到answer.text文本中
64 FileWriter fwas = null;//还是老样子首先要做的是定义一个变量
65 try {
66 //创建字符输出流
67 fwas = new FileWriter("answer.txt");//创建出来answer
68 for(int i = 0;i<100;i++)
69 fwas.write(answer[i]+"
");//把答案写入
70 } catch (IOException ioe) {
71 ioe.printStackTrace();
72 } finally {
73 //使用finally块来关闭文件输出流
74 if (fwas != null) {
75 fwas.close();//千万别忘记关闭了
76 }
77 }
78 }
79 //方法二输出题目进入控制台
80 public void print() throws IOException {
81 String str[]= new String[100];//开辟一个数组
82 int n =0;
83 File a=new File("test.txt");
84 FileInputStream b = new FileInputStream(a);
85 InputStreamReader c=new InputStreamReader(b,"UTF-8");//FileInputStream(文件字节读取流):read():一个一个字节的读
86 //read(byte[] buf):先把字节存入到缓冲区字节数组中,一下读一个数组(常用)
87 {
88 BufferedReader bufr =new BufferedReader(c);
89 String line = null;
90 while((line = bufr.readLine())!=null){
91 str[n]=line;
92 n++;
93 }
94 bufr.close();
95 }
96 c.close();//记得关闭两个打开的文件
97 b.close();
98 //把答案放进字符串数组中
99 String answer[]= new String[100];
100 n =0;
101 File as=new File("answer.txt");
102 FileInputStream bs = new FileInputStream(as);
103 InputStreamReader cs=new InputStreamReader(bs,"UTF-8");
104 {
105 BufferedReader bufrs =new BufferedReader(cs);
106 String lines = null;
107 while((lines = bufrs.readLine())!=null){
108 answer[n]=lines;
109 n++;
110 }
111 bufrs.close();
112 }
113 cs.close();
114 bs.close();//与上一个写法几乎完全相同只是把改放在text中的文件放在了answer中
115
116
117 //输出题目,并设置输出的格式
118 Scanner cin = new Scanner(System.in);//输入的算法
119 int score =0;
120 for(int i=0;i<100;i++) {
121 String Answer;
122 System.out.println(str[i]);//输出算式
123 Answer = cin.nextLine();//输入答案
124 if(Answer.equals("*")) {
125 System.out.println("您一共做了"+i+"道题");
126 System.out.println("您做错"+(i-score)+"题");
127 System.out.println("您做对"+score+"题");
128 System.exit(0);//统计结果
129 }
130 else {
131 if(Answer.equals(answer[i]))
132 score++;
133 }
134 }
135 }
136 public static void main(String[] args) throws IOException {//创建主函数,定义两个变量,调用相应的函数即可
137 The_Class_Test a = new The_Class_Test();//初始化
138 a.scanf();//调用函数
139 a.print();
140 }
141 }