随机100道四则运算(文件储存)

  这次课堂测试要求运用文件来实现一些四则运算的答题,一共可以分为三部分:生成四则运算,添加文件操作(录入、读出)、以及判断操作。最后则是这三部分的总和。

  在这个试验中,运用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);产生的是一到一百的随机整数。