日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 人文社科 > 生活经验 >内容正文

生活经验

Arithmetic

發(fā)布時(shí)間:2023/11/27 生活经验 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Arithmetic 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

前言

GitHub地址

合作伙伴:林奇凱


?

項(xiàng)目簡(jiǎn)介

  • Arithmetic是一個(gè)能夠自動(dòng)生成小學(xué)四則運(yùn)算題目的命令行程序

項(xiàng)目需求

  • 使用 -n 參數(shù)控制生成題目的個(gè)數(shù),例如:
    Myapp.exe -n 10
  • 使用 -r 參數(shù)控制題目中數(shù)值(自然數(shù)、真分?jǐn)?shù)和真分?jǐn)?shù)分母)的范圍,例如:
    Myapp.exe -r 10
  • 生成的題目中計(jì)算過(guò)程不能產(chǎn)生負(fù)數(shù),也就是說(shuō)算術(shù)表達(dá)式中如果存在形如e1?? e2的子表達(dá)式,那么e1?≥ e2
  • 生成的題目中如果存在形如e1?÷ e2的子表達(dá)式,那么其結(jié)果應(yīng)是真分?jǐn)?shù)。
  • 每道題目中出現(xiàn)的運(yùn)算符個(gè)數(shù)不超過(guò)3個(gè)。
  • 程序一次運(yùn)行生成的題目不能重復(fù),即任何兩道題目不能通過(guò)有限次交換+和×左右的算術(shù)表達(dá)式變換為同一道題目。例如,23 + 45 =?和45 + 23 = 是重復(fù)的題目,6?×?8 = 和8?× 6 = 也是重復(fù)的題目。3+(2+1)和1+2+3這兩個(gè)題目是重復(fù)的,由于+是左結(jié)合的,1+2+3等價(jià)于(1+2)+3,也就是3+(1+2),也就是3+(2+1)。但是1+2+3和3+2+1是不重復(fù)的兩道題,因?yàn)?+2+3等價(jià)于(1+2)+3,而3+2+1等價(jià)于(3+2)+1,它們之間不能通過(guò)有限次交換變成同一個(gè)題目。
  • 生成的題目存入執(zhí)行程序的當(dāng)前目錄下的Exercises.txt文件,格式如下:?

    1. 四則運(yùn)算題目1

    2. 四則運(yùn)算題目2

    ……

    其中真分?jǐn)?shù)在輸入輸出時(shí)采用如下格式,真分?jǐn)?shù)五分之三表示為3/5,真分?jǐn)?shù)二又八分之三表示為2’3/8
  • 在生成題目的同時(shí),計(jì)算出所有題目的答案,并存入執(zhí)行程序的當(dāng)前目錄下的Answers.txt文件,格式如下:

    1. 答案1

    2. 答案2

    特別的,真分?jǐn)?shù)的運(yùn)算如下例所示:1/6 + 1/8 = 7/24。
  • 程序應(yīng)能支持一萬(wàn)道題目的生成。
  • 程序支持對(duì)給定的題目文件和答案文件,判定答案中的對(duì)錯(cuò)并進(jìn)行數(shù)量統(tǒng)計(jì),輸入?yún)?shù)如下:

    Myapp.exe -e <exercisefile>.txt -a <answerfile>.txt
  • ?統(tǒng)計(jì)結(jié)果輸出到文件Grade.txt,格式如下:

    Correct: 5 (1, 3, 5, 7, 9)

    Wrong: 5 (2, 4, 6, 8, 10)

    其中“:”后面的數(shù)字5表示對(duì)/錯(cuò)的題目的數(shù)量,括號(hào)內(nèi)的是對(duì)/錯(cuò)題目的編號(hào)。為簡(jiǎn)單起見(jiàn),假設(shè)輸入的題目都是按照順序編號(hào)的符合規(guī)范的題目。

開(kāi)發(fā)中遇到的困難

  • 運(yùn)算優(yōu)先級(jí)問(wèn)題以及算式輸出時(shí)括號(hào)添加問(wèn)題:

一開(kāi)始是用char型來(lái)存運(yùn)算符,后來(lái)考慮到優(yōu)先級(jí)問(wèn)題,決定建一個(gè)運(yùn)算符的類——Operator。這個(gè)類有兩個(gè)成員變量,一個(gè)就是char型的運(yùn)算符,另一個(gè)就是int型的優(yōu)先級(jí)了,而這個(gè)優(yōu)先級(jí)與運(yùn)算符生成的個(gè)數(shù)有關(guān),所以在new一個(gè)運(yùn)算符對(duì)象時(shí)要調(diào)用帶參構(gòu)造函數(shù),并傳入存有運(yùn)算符個(gè)數(shù)的參數(shù)。對(duì)于括號(hào)問(wèn)題,我是根據(jù)優(yōu)先級(jí)來(lái)加括號(hào)的。

  • 什么樣的兩個(gè)問(wèn)題算是重復(fù)?

一開(kāi)始我以為如果題目A能通過(guò)交換律、結(jié)合律變換后得到題目B,那么AB就算重復(fù)。如:1+2+3=1+(2+3)=1+(3+2)=(1+3)+2=(3+1)+2=3+(1+2)=3+(2+1)=3+2+1,即1+2+3與3+2+1算是重復(fù)。如果是這樣的話,就只需要判斷兩道題的運(yùn)算數(shù)、運(yùn)算符和運(yùn)算結(jié)果是否都一樣就行了。

后來(lái)返回看需求時(shí)發(fā)現(xiàn)1+2+3與3+2+1不算重復(fù)。仔細(xì)看才發(fā)現(xiàn)1+2+3=3+3=6,而3+2+1=5+1=6,雖然最終結(jié)果相同,但是計(jì)算過(guò)程不同。于是,在原基礎(chǔ)上,我在Question類添加了一個(gè)用來(lái)存過(guò)程結(jié)果的列表results。這樣兩個(gè)問(wèn)題在運(yùn)算數(shù)、運(yùn)算符和運(yùn)算結(jié)果都一樣的基礎(chǔ)上,如果過(guò)程結(jié)果一一對(duì)應(yīng),才算是重復(fù)。

設(shè)計(jì)思路

PSP

PSP2.1

Personal Software Process Stages

預(yù)估耗時(shí)(分鐘)

實(shí)際耗時(shí)(分鐘)

Planning

計(jì)劃

?60?60

· Estimate

· 估計(jì)這個(gè)任務(wù)需要多少時(shí)間

?60?60

Development

開(kāi)發(fā)

660?780

· Analysis

· 需求分析 (包括學(xué)習(xí)新技術(shù))

?90?100

· Design Spec

· 生成設(shè)計(jì)文檔

?30?30

· Design Review

· 設(shè)計(jì)復(fù)審 (和同事審核設(shè)計(jì)文檔)

?30?30

· Coding Standard

· 代碼規(guī)范 (為目前的開(kāi)發(fā)制定合適的規(guī)范)

?30?30

· Design

· 具體設(shè)計(jì)

?60?60

· Coding

· 具體編碼

?240?320

· Code Review

· 代碼復(fù)審

?60?90

· Test

· 測(cè)試(自我測(cè)試,修改代碼,提交修改)

?120?120

Reporting

報(bào)告

?60?90

· Test Report

· 測(cè)試報(bào)告

?30?30

· Size Measurement

· 計(jì)算工作量

?20?30

· Postmortem & Process Improvement Plan

· 事后總結(jié), 并提出過(guò)程改進(jìn)計(jì)劃

?10?30

合計(jì)

??780?930

?

關(guān)鍵代碼

  • 分?jǐn)?shù)部分
    public class Fraction {int n=0;             //整數(shù)部分int molecular=0;     //分子int denominator=1;   //分母/*** 帶參構(gòu)造方法,用于隨機(jī)生成分?jǐn)?shù)* @param scope   給定分子分母的范圍*/public Fraction(int scope) {Random r=new Random();molecular=r.nextInt(scope)+1;denominator=r.nextInt(scope)+1;rationalize();}/*** 帶參構(gòu)造方法,用于賦值* @param n             整數(shù)部分* @param molecular     分子* @param denominator   分母*/public Fraction(int n,int molecular,int denominator) {this.molecular=molecular;this.denominator=denominator;this.n=n;rationalize();}/*** 無(wú)參構(gòu)造方法,生成一個(gè)數(shù)(默認(rèn)值為0,即0'0/1)*/public Fraction() {}/*** 分?jǐn)?shù)有理化*/public void rationalize() {//假分?jǐn)?shù)化為帶分?jǐn)?shù)if(molecular>=denominator){n+=molecular/denominator;molecular%=denominator;}//約分int gcd=Util.gCommonDivisor(molecular,denominator);if(gcd!=1) {molecular/=gcd;denominator/=gcd;}}/*** 通分* @param lcm   最小公倍數(shù)*/public void commonReduction(int lcm) {molecular*=lcm/denominator;denominator=lcm;}/*** 帶分?jǐn)?shù)化為假分?jǐn)?shù),用于計(jì)算*/public void changeToImproperFraction() {if(n==0) return;molecular+=n*denominator;n=0;}/*** 判斷數(shù)值是否為0* @return     為0返回true,否則返回false*/public boolean isZero() {if(n==0&&molecular==0) return true;return false;}@Overridepublic String toString() {rationalize();if(molecular%denominator==0) return ""+n;String fraction="";if(n>0) fraction+=n+"\'";fraction+=molecular;if(denominator>1) fraction+="/"+denominator;return fraction;}
    }

    ?

  • 運(yùn)算符部分
    ublic class Operator {char operator;   //運(yùn)算符int priority;    //優(yōu)先級(jí)(1最高)/*** 帶參構(gòu)造方法,用于隨機(jī)生成運(yùn)算符* @param n   運(yùn)算符個(gè)數(shù),用于生成優(yōu)先級(jí)*/public Operator(int n) {Random r=new Random();switch(r.nextInt(4)){case 0:operator='+';   //43break;case 1:operator='-';   //45break;case 2:operator='×';   //215break;default:operator='÷';   //247
            }priority=r.nextInt(n)+1;}/*** 帶參構(gòu)造方法,用于指定運(yùn)算符* @param c   運(yùn)算符* @param i   優(yōu)先級(jí)*/public Operator(char c,int i) {operator=c;priority=i;}/*** 判斷優(yōu)先級(jí)是否重復(fù)* 運(yùn)算符列表的最后一項(xiàng)與前面所有項(xiàng)進(jìn)行比較,如果出現(xiàn)優(yōu)先級(jí)重復(fù),則刪掉最后一項(xiàng)* @param list   運(yùn)算符列表* @return       重復(fù)返回true,否則返回false*/public static boolean isRepeated(List<Operator> list) {for(int i=0;i<list.size()-1;i++) if(list.get(list.size()-1).priority==list.get(i).priority){list.remove(list.size()-1);return true;}return false;}@Overridepublic String toString() {return operator+" : "+priority;}
    }

    ?

  • 運(yùn)算題目方面
    public class Question {int n=new Random().nextInt(3)+1;        //隨機(jī)生成題目運(yùn)算符的個(gè)數(shù)(1~3)String question="";            //題目List<Fraction> fractions=new ArrayList<Fraction>();   //生成的所有運(yùn)算數(shù)組成的列表(用于計(jì)算方法calculate())List<Operator> operators=new ArrayList<Operator>();   //生成的所有運(yùn)算符組成的列表(用于計(jì)算方法calculate())List<Fraction> results=new ArrayList<Fraction>();     //題目每一步運(yùn)算得出的結(jié)果組成的列表Fraction[] fTemp=new Fraction[n+1];     //生成的所有運(yùn)算數(shù)組成的數(shù)組(用于生成題目)Operator[] oTemp=new Operator[n];       //生成的所有運(yùn)算符組成的數(shù)組(用于生成題目)Fraction result;              //題目得出的最終結(jié)果/*** 帶參構(gòu)造方法,用于隨機(jī)生成題目* @param scope   給定數(shù)值的范圍*/public Question(int scope) {do{question="";fractions.clear();operators.clear();results.clear();Fraction f;Operator o;f=new Fraction(scope);fractions.add(f);fTemp[0]=f;for(int i=0;i<n;i++){do{o=new Operator(n);operators.add(o);if(i==0) break;}while(Operator.isRepeated(operators));   //用于生成優(yōu)先級(jí)不重復(fù)的運(yùn)算符oTemp[i]=o;f=new Fraction(scope);fractions.add(f);fTemp[i+1]=f;}result=calculate();     //計(jì)算}while(result.n==-1);      //如果結(jié)果為-1,證明題目不合法,需重新設(shè)置題目
        }/*** 帶參構(gòu)造方法,用于指定題目* @param fs   運(yùn)算數(shù)數(shù)組* @param os   運(yùn)算符數(shù)組*/public Question(Fraction[] fs,Operator[] os) {fTemp=fs;oTemp=os;for(Fraction f:fs) fractions.add(f);for(Operator o:os) operators.add(o);result=calculate();}/*** 計(jì)算* @return   返回最終結(jié)果,如果結(jié)果為-1,則證明題目非法* 題目非法的原因有二:* 1.被減數(shù)小于減數(shù)* 2.除數(shù)為0*/public Fraction calculate() {int priority=1;do{for(int i=0;i<operators.size();i++)if(operators.get(i).priority==priority){switch(operators.get(i).operator){case '+':fractions.set(i,Util.add(fractions.get(i),fractions.get(i+1)));break;case '-'://如果減數(shù)大于被減數(shù),則返回-1if(!Util.compare(fractions.get(i),fractions.get(i+1))) return new Fraction(-1,0,1);fractions.set(i,Util.minus(fractions.get(i),fractions.get(i+1)));break;case '×':fractions.set(i,Util.multiply(fractions.get(i),fractions.get(i+1)));break;case '÷'://如果除數(shù)為0,則返回-1if(fractions.get(i+1).isZero()) return new Fraction(-1,0,1);fractions.set(i,Util.divice(fractions.get(i),fractions.get(i+1)));break;}results.add(fractions.get(i));fractions.remove(i+1);operators.remove(i);break;}priority++;}while(operators.size()>0);return fractions.get(0);}/*** 判斷題目是否重復(fù)* 題目列表的最后一項(xiàng)與前面所有項(xiàng)進(jìn)行比較,如果出現(xiàn)題目重復(fù),則刪掉最后一項(xiàng)* @param list   題目列表* @return       重復(fù)返回true,否則返回false* 判斷題目重復(fù)的依據(jù)有二:* 1.運(yùn)算數(shù)相同,運(yùn)算符相同* 2.運(yùn)算順序相同,即結(jié)果列表一一對(duì)應(yīng)*/public static boolean isRepeated(List<Question> list) {for(int i=0;i<list.size()-1;i++){//最終結(jié)果不同if(!Util.isEqual(list.get(list.size()-1).result,list.get(i).result)) return false;//結(jié)果列表大小不同if(list.get(list.size()-1).results.size()!=list.get(i).results.size()) return false;//結(jié)果列表一一對(duì)應(yīng)存在不同元素for(int j=0;j<list.get(list.size()-1).results.size();j++)if(!Util.isEqual(list.get(list.size()-1).results.get(j),list.get(i).results.get(j))) return false;boolean bool=false;//數(shù)值列表存在不同元素for(Fraction f1:list.get(list.size()-1).fTemp){for(Fraction f2:list.get(i).fTemp){if(!Util.isEqual(f1,f2)) bool=false;else{bool=true;break;}}if(bool==false) return false;}//符號(hào)列表存在不同元素for(Operator o1:list.get(list.size()-1).oTemp){for(Operator o2:list.get(i).oTemp){if(!Util.isEqual(o1,o2)) bool=false;else{bool=true;break;}}if(bool==false) return false;}}list.remove(list.size()-1);return true;}@Overridepublic String toString() {int i1=0,i2=0,i3=0;for(;i1<oTemp.length;i1++)if(oTemp[i1].priority==1){question+=fTemp[i1]+" "+oTemp[i1].operator+" "+fTemp[i1+1];break;}if(oTemp.length>1){for(;i2<oTemp.length;i2++)if(oTemp[i2].priority==2){if(i2==i1-1) question=fTemp[i2]+" "+oTemp[i2].operator+" ( "+question+" )";if(i2==i1+1) question="( "+question+" ) "+oTemp[i2].operator+" "+fTemp[i2+1];if(oTemp.length==3){for(;i3<oTemp.length;i3++)if(oTemp[i3].priority==3){if(i3==0) question=fTemp[i3]+" "+oTemp[i3].operator+" [ "+question+" ]";if(i3==1){if(i1==1) question="( "+fTemp[i1]+" "+oTemp[i1].operator+" ) "+oTemp[i3].operator+" ( "+fTemp[i2]+" "+oTemp[i2].operator+" )";if(i2==1) question="( "+fTemp[i2]+" "+oTemp[i2].operator+" ) "+oTemp[i3].operator+" ( "+fTemp[i1]+" "+oTemp[i1].operator+" )";}if(i3==2) question="[ "+question+" ] "+oTemp[i3].operator+" "+fTemp[i3+1];break;}}break;}}question+=" = ";return question;}
    }

    ?

  • Util類基本方法
    public class Util {/*** 最大公因數(shù),用于約分* 遞歸實(shí)現(xiàn)輾轉(zhuǎn)相除法* @param a* @param b* @return   返回a、b的最大公因數(shù)*/public static int gCommonDivisor(int a,int b) {if(b==0) return a;else return gCommonDivisor(b,a%b);}/*** 最小公倍數(shù),用于通分* [a,b]=a*b/(a,b)* @param a* @param b* @return   返回a、b的最小公倍數(shù)*/public static int lCommonMultiple(int a,int b) {return a*b/gCommonDivisor(a,b);}/*** 判斷a、b的大小,用于判斷兩數(shù)相減時(shí)被減數(shù)是否不小于減數(shù)* @param a* @param b* @return   a>=b返回true,否則返回false*/public static boolean compare(Fraction a,Fraction b) {a.changeToImproperFraction();b.changeToImproperFraction();if(a.denominator!=b.denominator){int lcm=lCommonMultiple(a.denominator,b.denominator);a.commonReduction(lcm);b.commonReduction(lcm);}if(a.molecular>=b.molecular) return true;else return false;}/*** a+b* @param a* @param b* @return   返回a+b的結(jié)果*/public static Fraction add(Fraction a,Fraction b) {if(a.denominator!=b.denominator){int lcm=lCommonMultiple(a.denominator,b.denominator);a.commonReduction(lcm);b.commonReduction(lcm);}Fraction c=new Fraction(a.n+b.n,a.molecular+b.molecular,a.denominator);return c;}/*** a-b* @param a* @param b* @return   返回a-b的結(jié)果*/public static Fraction minus(Fraction a,Fraction b) {a.changeToImproperFraction();b.changeToImproperFraction();if(a.denominator!=b.denominator){int lcm=lCommonMultiple(a.denominator,b.denominator);a.commonReduction(lcm);b.commonReduction(lcm);}Fraction c=new Fraction(0,a.molecular-b.molecular,a.denominator);return c;}/*** a×b* @param a* @param b* @return   返回a×b的結(jié)果*/public static Fraction multiply(Fraction a,Fraction b) {a.changeToImproperFraction();b.changeToImproperFraction();Fraction c=new Fraction(0,a.molecular*b.molecular,a.denominator*b.denominator);return c;}/*** a÷b* @param a* @param b* @return   返回a÷b的結(jié)果*/public static Fraction divice(Fraction a,Fraction b) {a.changeToImproperFraction();b.changeToImproperFraction();Fraction c=new Fraction(0,a.molecular*b.denominator,a.denominator*b.molecular);return c;}/*** 判斷a、b是否相等,用于判斷題目是否重復(fù)* @param a* @param b* @return   a=b返回true,否則返回false*/public static boolean isEqual(Fraction a,Fraction b) {a.changeToImproperFraction();b.changeToImproperFraction();if(a.denominator!=b.denominator){int lcm=lCommonMultiple(a.denominator,b.denominator);a.commonReduction(lcm);b.commonReduction(lcm);}if(a.n==b.n&&a.molecular==b.molecular&&a.denominator==b.denominator) return true;return false;}/*** 判斷運(yùn)算符a、b是否相同,用于判斷題目是否重復(fù)* @param a* @param b* @return   a、b相同返回true,否則返回false*/public static boolean isEqual(Operator a,Operator b) {if(a.operator==b.operator) return true;return false;}
    }

    ?

  • Main主函數(shù)
    public class Main {public static void main(String[] args) {try {boolean flag=true;for(String s:args){if(s.equals("-n")||s.equals("-r")) break;   //生成題目和答案文檔else{   //對(duì)錯(cuò)題數(shù)量統(tǒng)計(jì)flag=false;break;}}//生成題目和答案文檔if(flag){List<Question> questionBase=new ArrayList<Question>();   //題庫(kù)int n=1;      //題目個(gè)數(shù)(默認(rèn)為1)int r=-1;     //數(shù)值范圍for(int i=0;i<args.length;i++){if(args[i].equals("-n")) n=Integer.valueOf(args[i+1]);if(args[i].equals("-r")) r=Integer.valueOf(args[i+1]);}//沒(méi)有給出數(shù)值范圍if(r==-1){System.err.println("Warning: The scope of value has not been given!");return;}Question q=new Question(r);questionBase.add(q);while(questionBase.size()<n||Question.isRepeated(questionBase)){q=new Question(r);questionBase.add(q);}//生成題目文件Questions.txtBufferedWriter bw1=new BufferedWriter(new FileWriter("C:\\Users\\asus\\Desktop\\四則運(yùn)算\\Questions.txt"));for(int i=0;i<questionBase.size();i++){String s=i+1+". "+questionBase.get(i)+"\r\n";bw1.write(s);}bw1.flush();bw1.close();//生成答案文件Answers.txtBufferedWriter bw2=new BufferedWriter(new FileWriter("C:\\Users\\asus\\Desktop\\四則運(yùn)算\\Answers.txt"));for(int i=0;i<questionBase.size();i++){String s=i+1+". "+questionBase.get(i).result+"\r\n";bw2.write(s);}bw2.flush();bw2.close();//生成答題文件Exercises.txtBufferedWriter bw3=new BufferedWriter(new FileWriter("C:\\Users\\asus\\Desktop\\四則運(yùn)算\\Exercises.txt"));for(int i=0;i<questionBase.size();i++){String s=i+1+". \r\n";bw3.write(s);}bw3.flush();bw3.close();return;}//對(duì)錯(cuò)題數(shù)量統(tǒng)計(jì)String e="",a="";for(int i=0;i<args.length;i++){if(args[i].equals("-e")) e=args[i+1];if(args[i].equals("-a")) a=args[i+1];}//沒(méi)有給出答題文件路徑if(e.equals("")){System.err.println("404: The exercises file is not found!");return;}//沒(méi)有給出答案文件路徑if(a.equals("")){System.err.println("404: The answers file is not found!");return;}List<String> exercises=new ArrayList<String>();List<String> answers=new ArrayList<String>();String str="";//讀取答題文件BufferedReader br1=new BufferedReader(new FileReader(e));for(int i=1;null!=(str=br1.readLine());i++)exercises.add(str.replace(i+". ",""));br1.close();//讀取答案文件BufferedReader br2=new BufferedReader(new FileReader(a));for(int i=1;null!=(str=br2.readLine());i++)answers.add(str.replace(i+". ",""));br2.close();String correct="",wrong="";List<Integer> corrects=new ArrayList<Integer>();List<Integer> wrongs=new ArrayList<Integer>();for(int i=0;i<answers.size();i++){if(exercises.get(i).equals(answers.get(i))) corrects.add(i+1);else wrongs.add(i+1);}for(int i=0;i<corrects.size();i++) correct+=corrects.get(i)+",";for(int i=0;i<wrongs.size();i++) wrong+=wrongs.get(i)+",";if(corrects.size()>0) correct=correct.substring(0,correct.length()-1);if(wrongs.size()>0) wrong=wrong.substring(0,wrong.length()-1);//生成分?jǐn)?shù)文件Grade.txtBufferedWriter bw=new BufferedWriter(new FileWriter("C:\\Users\\asus\\Desktop\\四則運(yùn)算\\Grade.txt"));bw.write("Correct:"+corrects.size()+"("+correct+")\r\nWrong:"+wrongs.size()+"("+wrong+")");bw.flush();bw.close();} catch (Exception e) {//-a C:\Users\asus\Desktop\四則運(yùn)算\Answers.txt -e C:\Users\asus\Desktop\四則運(yùn)算\Exercises.txt
                e.printStackTrace();}}
    }

    ?

單元測(cè)試

  • 測(cè)試題目重復(fù)的問(wèn)題,例:3+(2+1)和1+2+3這兩個(gè)題目是重復(fù)的,1+2+3和3+2+1是不重復(fù)的。
    public class test {public static void main(String[] args) {/** 測(cè)試題目重復(fù)*/Fraction[] r1 = {new Fraction(1,0,1),new Fraction(2,0,1),new Fraction(3,0,1)};Operator[] n1 = {new Operator('+',1),new Operator('+',2)};//1+2+3Fraction[] r2 = {new Fraction(3,0,1),new Fraction(2,0,1),new Fraction(1,0,1)};Operator[] n2 = {new Operator('+',2),new Operator('+',1)};//3+(2+1)Fraction[] r3 = {new Fraction(3,0,1),new Fraction(2,0,1),new Fraction(1,0,1)};Operator[] n3 = {new Operator('+',1),new Operator('+',2)};//3+2+1Fraction[] r4 = {new Fraction(1,0,1),new Fraction(2,0,1),new Fraction(3,0,1)};Operator[] n4 = {new Operator('+',1),new Operator('+',2)};//1+2+3
            Question q1=new Question(r1,n1);Question q2=new Question(r2,n2);Question q3=new Question(r3,n3);Question q4=new Question(r4,n4);List<Question> questionBase1=new ArrayList<Question>();questionBase1.add(q1);questionBase1.add(q2);List<Question> questionBase2=new ArrayList<Question>();questionBase2.add(q3);questionBase2.add(q4);for (Question question : questionBase1) {System.out.println(question);}        boolean flag1 = Question.isRepeated(questionBase1);        System.out.println(flag1);for (Question question : questionBase2) {System.out.println(question);}        boolean flag2 = Question.isRepeated(questionBase2);        System.out.println(flag2);}}
  • 運(yùn)行結(jié)果

? ? ? ? ??

?

?

測(cè)試結(jié)果

正常測(cè)試:

  • 首先四則運(yùn)算的文件夾是空的

? ? ? ?

  • 輸入-n 10 -r 10
  • 文件夾內(nèi)生成了如下三個(gè)TXT文件

? ? ?

? ? ?? 這是題目的答案

? ? ?? ?這是練習(xí)時(shí)的答題卡

? ? ?? ?這里是生成的10道題目

  • 填入以下答案(3和9故意填錯(cuò)的),保存

? ? ?

  • 輸入?-e C:\Users\asus\Desktop\四則運(yùn)算\Exercises.txt -a C:\Users\asus\Desktop\四則運(yùn)算\Answers.txt

  ???這里生成了一個(gè)Grade文件

  • 對(duì)結(jié)果的判斷如下:

? ? ?

?

轉(zhuǎn)載于:https://www.cnblogs.com/ac666/p/9695396.html

總結(jié)

以上是生活随笔為你收集整理的Arithmetic的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。