这次课堂测试要求运用文件来实现一些四则运算的答题,一共可以分为三部分:生成四则运算,添加文件操作(录入、读出)、以及判断操作。最后则是这三部分的总和。
在这个试验中,运用Bufferedreader,BufferedWriter文件读入读取操作。以及运用subString来将读取到的一行数据进行分割开,并运用switch语句来实现不同运算的分割。在最后统计但对个数是,本来是运用引用实现技术效果,但是在实际操作中发现java对于整形引用,我并不了解事后了解到,java中没有明确的引用方式,运用的是参数的传递,在不同的类中不能直接修改该类的私有成员。如果想引用的话,需要将int,改成Integer。Integer是对象,int是基本类型。经过试验可以运行。
源代码:
Operations.java import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.util.Scanner; public class Operations { private int a; private int b; private char c; //private static int time=0; //public int getTime() { //return time; //} public int getA() { return a; } public void setA() { a=1+(int)(Math.random()*100); } public int getB() { return b; } public void setB() { b=1+(int)(Math.random()*100); } public int getC() { return c; } public void setC() { int i=1+(int)(Math.random()*4); switch(i) { case 4:c='+';break; case 1:c='-';break; case 2:c='*';break; case 3:c='/';break; } } Operations(){ setA(); setB(); setC(); } String shengcheng() { int k; String st; if(c=='-') { if(a<b) {k=a;a=b;b=k;} } if(c=='*') { b=(int)((Math.random()*9+1))+1; } if(c=='/') { b=(int)((Math.random()*9+1))+1; while(a%b!=0) { a++; } } st=a+" "+c+" "+b +" ="; return st; } void intext(Integer time) throws IOException { String str; try { BufferedReader in=new BufferedReader(new FileReader("Text.txt")); while((str = in.readLine())!=null) { //System.out.println(str); panduan(str,time); } in.close(); } catch (IOException e) { System.out.println("缓冲区错误"); } } void outText() throws IOException{ try { BufferedWriter out=new BufferedWriter(new FileWriter("Text.txt")); for(int i=0;i<10;i++) { setA(); setB(); setC(); out.write(shengcheng()); out.newLine(); } out.flush(); out.close(); } catch (IOException e) { System.out.println("缓冲区错误"); } } void panduan(String str,Integer time) { Scanner read=new Scanner(System.in); char[] ch=str.toCharArray(); String oper; int get,first,second; int [] num; num=new int [3]; for(int i=0,j=0;i<str.length();i++) { if(ch[i]==' ') {num[j]=i;j++;} } first=Integer.parseInt(str.substring(0, num[0])); oper=str.substring(num[0]+1, num[1]); second=Integer.parseInt(str.substring(num[1]+1, num[2])); System.out.println("*********"); System.out.println(first+" "+oper+" "+second+" ="); System.out.print("输入答案:"); get=read.nextInt(); System.out.println("*********"); switch(oper){ case "+":{if(get==(first+second))time++;}break; case "-":{if(get==(first-second))time++;}break; case "*":{if(get==(first*second))time++;}break; case "/":{if(get==(first/second))time++;}break; } } }
Main.java import java.io.IOException; public class Main { public static void main(String[] args) throws IOException { int time=0; Operations op=new Operations(); op.outText(); op.intext(time); //System.out.println("正确数量:"+op.getTime()); //System.out.println("错误数量:"+(10-op.getTime())); System.out.println("正确数量:"+time); System.out.println("错误数量:"+(10-time)); } }
这次试验遇到的问题:对于随机数的掌握还是有一些不太熟练,以及subString(x,y);其中的x是以数组的下标来计算的,是【x,y)范围(以数组下标来实现的)。Random用法(int)1+(int)(Math.random()*100);产生的是一到一百的随机整数。