2018年11月15日课堂测验,完成时间16:24

用时两个小时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 }
原文地址:https://www.cnblogs.com/jyt123/p/9964364.html