关于输入输出流(四则运算)

Posted yxsz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于输入输出流(四则运算)相关的知识,希望对你有一定的参考价值。

  题目要求:

  构建100以内加减乘除随机题目100道,并输出至.txt文件内,然后再从文件中输出至屏幕,做一道比对一道题的答案,敲击回车出现下一道题,最后统计正确与错误题数,打印出来。

 题目思路:

  本题有三个难点,第一,如何构建100道随机数学题;第二,如何能将构建出的题目“安全”地运送至文件中;第三,如何进行输出并比对答案,进行统计?

(1)构建随机100以内数学题原码:

        Random rd=new Random();
        String fh[]={"+","-","*","/"};
        int num1;
        int num2;
        int h;
        static int t,f;
        
        public int getT() {
            return t;
        }
        public  void setT() {
            t++;
        }
        public int getF() {
            return f;
        }
        public void setF() {
            f++;
        }
        int number;
        static int answer;
        public int getAnswer() {
            return answer;
        }
        public void setAnswer(int answer) {
            this.answer = answer;
        }
        public int getNum1() {
            
            return num1;
        }
        public void setNum1(int num1) {
            this.num1 =num1;
        }
        public int getNum2() {
            
            return num2;
        }
        public void setNum2(int num2) {
            this.num2 =num2;
        }
        public int getH() {
            
            return h;
        }
        public void setH(int h) {
            this.h = h;
        }
        public String[] getFh() {
            return fh;
        }
        public void fuzhi()
        {
            Random rd=new Random();
            num1=1+rd.nextInt(101);
            num2=1+rd.nextInt(101);

             h=rd.nextInt(4);
            setNum1(num1);
            setNum2(num2);
            setH(h);
            
            if(fh[h].equals("+"))
            {
                if(num1+num2<=100)
                {
                    setAnswer(num1+num2);
                }
                else
                {
                    fuzhi();
                }
                
            }
            else if(fh[h].equals("-"))
            {
                setAnswer(num1-num2);
            }
            else if(fh[h].equals("*"))
            {
                if(num1*num2<=0)
                {
                    setAnswer(num1*num2);
                }
                else
                {
                    fuzhi2();
                }

            }
            else if(fh[h].equals("/"))
            {
                if(getNum1()%getNum2()==0)
                {
                setAnswer(num1/num2);
                }
                else
                {
                    
                    fuzhi();
                }

            }
            
        }
        public void fuzhi2()
        {
            Random rd=new Random();
            num1=1+rd.nextInt(11);
            num2=1+rd.nextInt(11);
            
            setNum1(num1);
            setNum2(num2);
            
            setAnswer(num1*num2);
        }

(2)将100道题输出至文件原码:

        public void  Output{
                PrintStream ps = null; 
            try {
                //创建一个节点输出流:FileOutputStream
                FileOutputStream fos = new FileOutputStream("E:\\f1.txt");
                //以PrintStream来包装FileOutputStream输出流
                ps = new PrintStream(fos);
                //使用PrintStream执行输出
                for(int i=0;i<5;i++) {
                    d.fuzhi();
                    ps.println(d.getNum1()+d.getFh()[d.getH()]+d.getNum2()+"="+" 
 ");
                    array.add(d.getAnswer());
                }
            }
            catch (IOException ioe) {
                ioe.printStackTrace(ps);
            }finally {
                ps.close();
            }     
        }

 

(3)比对并输出正误题数

      public void Input{
            FileReader fileReader =new FileReader("E:\\f1.txt");
            @SuppressWarnings("resource")
            BufferedReader bufferedReader =new BufferedReader(fileReader);
            ArrayList<String> list =new ArrayList<String>();
            String str=null;
            while((str=bufferedReader.readLine())!=null) {
                if(str.trim().length()>2) {
                    list.add(str);
                }
            }
            for(;m<list.size();m++) {
                System.out.print(list.get(m));
                int b=sc.nextInt();
                if(b==array.get(m)) {
                    t++;
                }
                else {
                    f++;
                }
            }
            System.out.println("共答对"+t+"道题");
            System.out.println("答错"+f+"道题");
     
          }
    }

结果截图:

技术分享图片

 

 感悟:

本题难度中等,主要考验的是输入输出流的内容,但本题也耗费了我将近4个小时,累觉不爱……第三个问题是折磨我时间最长的一个问题,后来干脆用输出至ArrayList的方法来保证题目的对应,这样才完成了这道题。

 

以上是关于关于输入输出流(四则运算)的主要内容,如果未能解决你的问题,请参考以下文章

C++中如何重载输入输出流运算符使其可用于矩阵的输入输出?

C++ 输入/输出运算符重载

C++重载IO输入输出流运算符

C++重载IO输入输出流运算符

C++重载IO输入输出流运算符

C++重载IO输入输出流运算符