四则运算课堂检测
这周四,又进行了一次课堂检验。测试的题目是曾经编写过的题目四则运算。在以前的基础上增加了文件导入和统计分数。虽然只是增加了两个功能,却让我懵了很久。
一直在想该如何快捷的写出整个程序,将算式输出,获取用户输入数据和真实结果比较,如果相同正确加一,如果不同错误加一并记下题目,最后导入到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(); } }