1. 程式人生 > >關於輸入輸出流(四則運算)

關於輸入輸出流(四則運算)

  題目要求:

  構建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()+"="+" \n ");
                    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的方法來保證題目的對應,這樣才完成了這道題。