關於輸入輸出流(四則運算)
阿新 • • 發佈:2018-11-15
題目要求:
構建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的方法來保證題目的對應,這樣才完成了這道題。