四则运算课堂检测

        这周四,又进行了一次课堂检验。测试的题目是曾经编写过的题目四则运算。在以前的基础上增加了文件导入和统计分数。虽然只是增加了两个功能,却让我懵了很久。

       一直在想该如何快捷的写出整个程序,将算式输出,获取用户输入数据和真实结果比较,如果相同正确加一,如果不同错误加一并记下题目,最后导入到txt文件中就可以了。想法很简单,但做起来的时候遇到了很多问题。因为马虎大意出现了很多细节错误,没有类型转换,数据没有初始化等等。越来越慌越来越乱,越来越没有头绪,无从下手。近似发呆的一直坐在找寻网上大牛是如何思考编程,收效甚微。最后老师让好几个提前做完的同学上台展示,才恍然大悟,是自己想的太笼统,没有细化这个题目,可以用一个一个模块分别计算最后总和就好了。慢慢的才有了更加简洁正确的思路,最后编出了程序。程序虽然多了很多行,但它分成了一个一个模块,在分模块测试的时候也特别方便。编写这些子程序很轻松就可以出来,调试正确后组合,再调试,最后成品就出现了。

       想来想去,这次耽误很多时间是因为没有思绪,没有思绪是因为没有分模块思考。总是想一次性写下来,可明显自己实力还没有那么强,编写过程中的错误防不胜防。还好最后在同学的展示下慢慢的调整了过来,完成了题目。

题目如下:

package 四则运算;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Random;
import java.util.Scanner;

public class Jisuan{
    
    //随机生成100道题目
    public void scanf() throws IOException {
        String str[]=new String[100];
        String answer[]= new String[100];
        int n = 0;
        int x,y,m,mm;
        Random random = new Random(System.currentTimeMillis());
        String ch[] = new String[] {"-","+","/","*"};
        
        for(int i = 1;i<=100;i++) {
        
                 x = random.nextInt(100)+1;
                 y = random.nextInt(100)+1;
                 m = random.nextInt(20);
                 mm = random.nextInt(4);
                 if(ch[mm]=="*"){
                    str[n]=  x+"*"+y+"=";
                    answer[n]=x*y+"";}
                  if(ch[mm]=="/"){
                    str[n]=  x*m+ch[mm]+x+"=";
                    answer[n]=m+"";
                  }
                  if(ch[mm]=="+"){
                     str[n] = x+"+"+y+"=";
                     answer[n]=x+y+"";
                  }
                  if(ch[mm]=="-")
                  {
                      if(x>y)
                         str[n]= x+"-"+y+"=";
                      else 
                          str[n]= y+"-"+x+"=";
                      answer[n]=Math.abs(x-y)+"";
                  }
                  n++;
        }
        //将题目输入test.txt文本中
         FileWriter fw = null;
            try {
                //创建字符输出流
                fw = new FileWriter("test.txt");
                for(int i = 0;i<100;i++)
                fw.write(str[i]+"\r\n");
            } catch (IOException ioe) {
                ioe.printStackTrace();
            } finally {
                //使用finally块来关闭文件输出流
                if (fw != null) {
                    fw.close();
                }
            }
          //将答案添加到answer.text文本中
            FileWriter fwas = null;
            try {
                //创建字符输出流
                fwas = new FileWriter("answer.txt");
                for(int i = 0;i<100;i++)
                fwas.write(answer[i]+"\r\n");
            } catch (IOException ioe) {
                ioe.printStackTrace();
            } finally {
                //使用finally块来关闭文件输出流
                if (fwas != null) {
                    fwas.close();
                }
            }
        }
    
    public void print()  throws IOException {
        //输出题目进入控制台
        String str[]= new String[100];
        int n =0;
        File a=new File("test.txt");
           FileInputStream b = new FileInputStream(a);
           InputStreamReader c=new InputStreamReader(b,"UTF-8");
           {
            BufferedReader bufr =new BufferedReader(c);
            String line = null;
            while((line = bufr.readLine())!=null){
            str[n]=line;
            n++;
            }
            bufr.close();            
           }
           c.close();
           b.close();
           //把答案放进字符串数组中
           String answer[]= new String[100];
             n =0;
            File as=new File("answer.txt");
               FileInputStream bs = new FileInputStream(as);
               InputStreamReader cs=new InputStreamReader(bs,"UTF-8");
               {
                BufferedReader bufrs =new BufferedReader(cs);
                String lines = null;
                while((lines = bufrs.readLine())!=null){
                    answer[n]=lines;
                n++;
                }
                bufrs.close();            
               }
               cs.close();
               bs.close();
        
               Scanner cin = new Scanner(System.in);
               int score =0;
               for(int i=0;i<=100;i++) {
                   String Answer;
                   System.out.println(str[i]);
                   Answer = cin.nextLine();
                   if(Answer.equals("*")) {
                       System.out.println("您一共做了"+i+"道题");
                       System.out.println("您做错"+(i-score)+"题");
                       System.out.println("您做对"+score+"题");
                       System.exit(0);
                   }
                   else {
                       if(Answer.equals(answer[i]))
                           score++;
                   }
               }
    }
    public static void main(String[] args) throws IOException {
        Jisuan a = new Jisuan();
        a.scanf();
        a.print();
    }
}

 

posted @ 2018-11-15 16:39  Triassic  阅读(163)  评论(0编辑  收藏  举报