• 四则运算(文件存储)


    当堂测试,将四则运算随机生成100道题,存储在TXT文本中,同时在题目后面存储*作为分界符,实现答题判断对错并汇总功能。

    【设计思想】

      1.随机生成100道四则运算计算题

      2.将生成的100道题存储在.txt文件里

      3.读取txt文件,并作答,判断答案正误,输出汇总

      设计思想很简单,一些代码实现也不是很难,真正困扰我编程的是文件的输入流和输出流操作,BufferedReader和BufferedWriter,对于文件的操作差的太多,自己也不知道如何下手文件问题,最后还是在同学帮助下才弄懂一点点操作。空余时间还是应该多练一下。

    【源代码】为测试方便,将生成题目数改成10道

      1 package demo;
      2 
      3 import java.io.BufferedReader;
      4 import java.io.BufferedWriter;
      5 import java.io.FileReader;
      6 import java.io.FileWriter;
      7 import java.io.IOException;
      8 import java.util.Scanner;
      9 
     10 public class chuti {
     11 
     12     static String[] question = new String[100];
     13     static int[] answer = new int[100];
     14 
     15     public static int getRandom(int n, int m) {
     16         // 产生n->m的随机数
     17         return (int) (Math.random() * (m - n) + n);
     18     }
     19 
     20     public static char getCharRandom() {
     21         // 随机产生四种运算符
     22         char sign = 0;
     23         int Sn;
     24         Sn = getRandom(1, 5);
     25         switch (Sn) {
     26         case 1:
     27             sign = '+';
     28             break;
     29         case 2:
     30             sign = '-';
     31             break;
     32         case 3:
     33             sign = '×';
     34             break;
     35         case 4:
     36             sign = '÷';
     37             break;
     38         }
     39         return sign;
     40     }
     41 
     42     public static  void main(String[] args) {
     43         // TODO Auto-generated method stub
     44         Scanner cin = new Scanner(System.in);
     45         //File file = new File("E:\szys.txt"); 
     46         int i = 0;
     47         int huida,score = 0;
     48          do
     49          {
     50              int  x = (int) (Math.random() * (100 - 1 )+ 1);  //产生1-100的随机数
     51              int  y = (int) (Math.random() * (100 - 1 )+ 1);  //产生1-100的随机数
     52              char sign = getCharRandom();
     53              /*
     54               * 判断乘法的范围*/
     55              switch(sign)
     56              {
     57              case '+':
     58                  question[i] = x +""+ sign +""+ y + "=";
     59                  huida = x + y;
     60                  answer[i] = huida;        
     61                  //System.out.println( "("+ (i+1) +")"+ x + " " + sign + " " + y + "="     );
     62                  i++;break;
     63              case '-':
     64                  if(x < y)                        //判断减数与被减数的大小关系
     65                  {
     66                      int temp;
     67                      temp = x;
     68                      x = y;
     69                      y = temp;
     70                  }
     71                  question[i] = x +""+ sign +""+ y + "=";
     72                  huida = x - y;
     73                  answer[i] = huida;    
     74                  //System.out.println( "("+ (i+1) +")"+ x + " " + sign + " " + y + "="     );
     75                  i++;break;
     76              case '×':
     77              {
     78                  x = (int) (Math.random() * (10 - 1 )+ 1);//新生成x,y<9的随机数
     79                  y = (int) (Math.random() * (10 - 1 )+ 1);
     80                  question[i] = x +""+ sign +""+ y + "=";
     81                  huida = x * y;
     82                  answer[i] = huida;    
     83                      //System.out.println( "("+ (i+1) +")"+ x + " " + sign + " " + y + "="     );
     84                  i++;
     85              };break;
     86              case '÷':
     87                  do                                             //循环生成除法
     88                  {
     89                      y = (int) (Math.random() * (10 - 1 )+ 1);
     90                      x = (int) (Math.random() * (9*y - 1 )+ 1);
     91                                             
     92                  }
     93                 while(x % y != 0) ;
     94                 question[i] = x +""+ sign+"" + y + "=";
     95                 huida = x / y;
     96                  answer[i] = huida;    
     97                 //System.out.println( "("+ (i+1) +")"+ x + " " + sign + " " + y + "="     );
     98                 i++;break;
     99                  }
    100         }
    101         while(i<10);
    102          
    103          
    104     try {
    105             BufferedWriter br= new BufferedWriter(new FileWriter("szys.txt")); 
    106             for(int k = 0;k<10;k++)
    107             {
    108                 br.write("("+(k+1)+")"+String.valueOf(question[k])+"*"+String.valueOf(answer[k]));//读取数组进缓冲区
    109                 br.newLine();//写入新的一行,换行
    110                 br.flush();//将缓冲区存入txt
    111             }    
    112         } catch (IOException e) {
    113         //文件读写异常
    114         e.printStackTrace();
    115     }
    116     
    117     try {
    118             String line = null;
    119             BufferedReader re = new BufferedReader(new FileReader("szys.txt"));//新定义
    120             while((line = re.readLine())!= null)
    121             {//逐行读取文件
    122                 String [] txt = line.split("\*");//以*为分界,将.txt分开成问题和答案两块
    123                 System.out.println(txt[0]);//输出题目
    124                 System.out.print("Your answer:");
    125                 String an = cin.next();
    126                 if(txt[1].equals(an))//判断答案与回答
    127                 {
    128                     System.out.println("回答正确!");
    129                     score++;
    130                 }
    131                 else
    132                     System.out.println("回答错误!正确答案:" + txt[1]);
    133             }
    134             System.out.println("共答对"+ score + "题,答错" + (10-score) + "题");
    135     }catch(IOException e)
    136         {
    137             e.printStackTrace();
    138         }
    139 
    140 }
    141 }

    【运行结果】

    【szys.txt】

  • 相关阅读:
    C *p++ (*p)++ *p+=2 区别
    C 找到两字串中最长的相同串
    Jquery插件Jquerycolor
    C Fibonacci前N项和 阶乘的前N项和
    Baidu Google地图应用
    6.11Java多线程、并发、同步、synchronized方法
    6.10Java线程同步_synchronized
    6.18Java多线程并发、同步性能分析
    6.11Java多线程、并发、同步、synchronized块
    6.18Java多线程同步方法实现DemoNo2
  • 原文地址:https://www.cnblogs.com/flw0322/p/9964621.html
Copyright © 2020-2023  润新知