zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    [转载] 美团-云鹏: 写给工程师的十条精进原则
    Docker测试一个静态网站
    Docker容器访问外部世界
    Docker容器间通信
    Docker网络(host、bridge、none)详细介绍
    Docker的资源限制(内存、CPU、IO)详细篇
    esxi中CentOS7不停机加磁盘并扩容现有分区
    ESXI6.5安装CentOS7教程
    Linux查看占用CPU和内存的 的程序
    Centos7使用脚本搭建LVS的DR模式。
  • 原文地址:https://www.cnblogs.com/jyt123/p/9964364.html
Copyright © 2011-2022 走看看