//Source Code PackageAvshabi;ImportJava.util.StringTokenizer; Public classCalculator {intnumerator;//moleculeintdenominator;//DenominatorCalculator () {}calculator (intAintb) {if(A = = 0) {Numerator= 0;d Enominator= 1;}Else{Setnumeratoranddenominator (A, b);}}voidSetnumeratoranddenominator (intAintb) {//set numerator and denominatorintc = f (Math.Abs (a), Math.Abs (b));//calculate greatest Common divisorNumerator = A/C;denominator= b/C;if(Numerator<0 && denominator<0) {Numerator= -Numerator;denominator= -denominator;}}intGetnumerator () {returnnumerator;}intGetdenominator () {returndenominator;}intFintAintb) {//ask for A and B greatest common divisorif(A <b) {intc =A;a=b;b=C;}intr = a%b; while(r! = 0) {a=b;b=R;; R= a%b;}returnb;} Calculator Add (Calculator r) {//addition OperationintA =r.getnumerator ();intb =r.getdenominator ();intNewnumerator = numerator * b + denominator *A;intNewdenominator = Denominator *b; Calculator result=NewCalculator (newnumerator,newdenominator);returnresult;} Calculator Sub (Calculator r) {//Subtraction OperationsintA =r.getnumerator ();intb =r.getdenominator ();intNewnumerator = numerator * B-denominator *A;intNewdenominator = Denominator *b; Calculator result=NewCalculator (newnumerator,newdenominator);returnresult;} Calculator Muti (Calculator r) {//Multiplication OperationsintA =r.getnumerator ();intb =r.getdenominator ();intNewnumerator = numerator *A;intNewdenominator = Denominator *b; Calculator result=NewCalculator (newnumerator,newdenominator);returnresult;} Calculator Div (Calculator r) {//Division OperationintA =r.getnumerator ();intb =r.getdenominator ();intNewnumerator = numerator *b;intNewdenominator = Denominator *A; Calculator result=NewCalculator (newnumerator,newdenominator);returnresult;}//encapsulates the specific operation, mainly for the conversion of the input, the output package Public Static voidCompute (String data1,string operation,string data2) {StringTokenizer Fenxi=NewStringTokenizer (Data1, "/");intData1_1 =Integer.parseint (Fenxi.nexttoken ());intData1_2 =Integer.parseint (Fenxi.nexttoken ()); Fenxi=NewStringTokenizer (Data2, "/");intData2_1 =Integer.parseint (Fenxi.nexttoken ());intData2_2 =Integer.parseint (Fenxi.nexttoken ()); Calculator R1=NewCalculator (data1_1,data1_2); Calculator R2=NewCalculator (data2_1,data2_2); Calculator result;intb;if(Operation.equals ("+") {result=R1.add (R2); a=result.getnumerator (); b=Result.getdenominator (); System.out.println (Data1+ "+operation+" "+data2+" = "+ A +"/"+b);}if(Operation.equals ("-") {result=r1.sub (R2); a=result.getnumerator (); b=Result.getdenominator (); System.out.println (Data1+ "+operation+" "+data2+" = "+ A +"/"+b);}if(Operation.equals ("*") {result=R1.muti (R2); a=result.getnumerator (); b=Result.getdenominator (); System.out.println (Data1+ "+operation+" "+data2+" = "+ A +"/"+b);}if(Operation.equals ("/") {result=R1.div (R2); a=result.getnumerator (); b=Result.getdenominator (); System.out.println (Data1+ "+operation+" "+data2+" = "+ A +"/"+b);}}} //Test Class PackageAvshabi;ImportJava.util.Scanner; Public classtestcal { Public Static voidMain (string[] args) {//TODO auto-generated Method Stub//user input two fractions and operatorsScanner input =NewScanner (system.in); System.out.println ("Please enter your first score (format A/b)"); String data1=Input.next (); System.out.println ("Ask the user to enter the operator to be operated on (+-*/)"); String Operation=Input.next (); System.out.println ("Please enter a second score (format C/D)"); String data2=Input.next ();//perform specific operations based on user inputCalculator cal =NewCalculator (); System.out.println ("The result of the operation is:"); Cal.compute (Data1, operation, data2);// } }}//juint Test application Example PackageAvshabi;Import Staticorg.junit.assert.*;Importorg.junit.Test; Public classcalculatortest {Calculator cal=NewCalculator (); @Test Public voidTestsetnumeratoranddenominator () {Cal.setnumeratoranddenominator (2, 3); } @Test Public voidtestf () {CAL.F (1, 2); } @Test Public voidtestsub () {cal.sub (CAL); } @Test Public voidTestcompute () {Cal.compute ("1/2", "+", "1/3"); }}
5.2 Testing and encapsulation