实验要求:随机生成100道四则运算题目,输入到文档中,再从文档中读取实现在线作答,并判断正误。
源程序:
import java.io.*;
import java.util.Scanner;
public class test2{
public static void main(String [] args)throws IOException
{
PrintStream ps = null;
int [] c=new int[150];//创建存放答案的数组
try
{
FileOutputStream fos = new FileOutputStream("D:\\test.txt");
ps = new PrintStream(fos);
for(int i=0;i<100;i++)
{ ps.print("第"+(i+1)+"题 ");
int a= (int)(Math.random()*100);
int b=(int)(Math.random()*100);
switch((int)(Math.random()*4))
{//将题目输入到文档中并将正确答案存入数组
case 0:ps.println(a+"+"+b+"=");c[i]=a+b;
ps.println("**************");break;
case 1:if(a<b)
{int t=a;a=b;b=t;}
ps.println(a+"-"+b+"=");c[i]=a-b;
ps.println("***************");break;
case 2:ps.println(a+"*"+b+"=");c[i]=a*b;
ps.println("***************");break;
case 3:while(b==0)
b= (int)(Math.random()*100);
ps.println(a+"/"+b+"=");c[i]=a/b;
ps.println("***************"); break;
}
}
}catch (IOException ioe) {
ioe.printStackTrace(ps);
} finally {
ps.close();
}
Scanner in=new Scanner(System.in);
BufferedReader br = null;
int [] d=new int[100];
System.out.println("请输入要做题的个数:");
int n=in.nextInt();
int m=0;
try
{
br = new BufferedReader(new FileReader("D:\\test.txt"));
String line=br.readLine();
for(int i=0;i<2*n;i++)//将题目从文档中输出
{
System.out.println(line);
if(!(line.equals("***************")))
{ //将所做答案存入另一个数组
d[m]=in.nextInt();
m++;
}
line=br.readLine();
}
}catch(IOException e) {
e.printStackTrace();
}
int q=0;
for(int j=0;j<n;j++)
{ //所做答案与正确答案相比较
if(d[j]==c[j])
{ q++; }
}
int n1=n-q;
System.out.println("共答"+n+"题,答对"+q+"题,答错"+n1+"题.");
}
}
结果截图:
总结:开始做的时间在1:50左右,但完成时间在4:30,历时将近三小时。 原因:对文件的写入与读取操作不够熟练,不能轻松地运用,以及拿到题目后不能快速的建立起思路、整个程序框架等。这个程序中随机生成题目部分的代码是直接把上次写的直接拿来用的,因此在这儿没有耽误时间。在文件操作这儿,由于不熟练,于是看了看课件及示例代码,才开始着手编。把导入文件这块弄好后,运行不成功,以为是文件导入方法的问题,经过改变方法还是出现错误,仔细查看错误原因才发现是代码中的txt文档地址格式不对,在这儿可以说是白白浪费了将近半小时啊。接下来就是将题目从文件读取输出了,这儿也是参考示例代码写的,倒是没出什么问题。判断正误我用的方法是:将正确答案存入一个数组,将用户输入的答案存入另一个数组,两个数组进行比对,最后输出正确与错误的题目数量。总之这个实验我出现了很多不该出的问题,导致白白浪费时间,以及知识掌握不到位,不熟练。