统计题目完成数并计算正确率html
设计测试类,利用JUnit测试整数类与分数类的四则运算java
public Fraction (int numer, int denom)
方法,以及Math.abs(numerator)
来保证算法不出现漏洞。除此以外还要注意分子分母计算的一些限定特性。咱们一样加进代码里。git
源代码及分析注释:算法
import java.util.Random; public class Fraction { private int numerator, denominator; //定义分母、分子 public Fraction (int numer, int denom) { if(denom == 0 ) //分子为0 denom = 1; if (denom < 0) //若分母小于0,则取分母为正值,分子为负值 { numer = numer * -1; denom = denom * -1; } numerator = numer; denominator = denom; reduce(); } public int getNumerator() { return numerator; } public int getDenominator() { return denominator; } public Fraction add(Fraction op2) //实现真分数加法运算 { int commonDenominator = denominator * op2.getDenominator(); //两随机数a一、a2的分母相乘,进行通分 int numerator1 = numerator * op2.getDenominator(); //a1的分子=a1的分子与a2的分母相乘 int numerator2 = op2.getNumerator() * denominator; //a2的分子=a2的分子与a1的分母相乘 int sum = numerator1 + numerator2; //将通分事后的两个随机数相加 System.out.print("("+this.toString()+")" + " + " + "("+op2.toString()+")" + "="); return new Fraction (sum, commonDenominator); } public Fraction subtract(Fraction op2) //实现真分数减法运算 { int commonDenominator = denominator * op2.getDenominator(); int numerator1 = numerator * op2.getDenominator(); int numerator2 = op2.getNumerator() * denominator; int difference = numerator1 - numerator2; System.out.print("("+this.toString()+")" + " - " + "("+op2.toString()+")" + "="); return new Fraction(difference,commonDenominator); } public Fraction multiply (Fraction op2) //实现真分数乘法运算 { int numer = numerator * op2.getNumerator(); int denom = denominator * op2.getDenominator(); System.out.print("("+this.toString()+")" + " * " + "("+op2.toString()+")" + "="); return new Fraction (numer, denom); } public Fraction divide (Fraction op2) //实现真分数除法运算 { int numer = numerator * op2.getDenominator(); int denom = denominator * op2.getNumerator(); System.out.print("("+this.toString()+")" + " / " + "("+op2.toString()+")" + "="); return new Fraction (numer, denom); } public String toString() //输出格式及限定 { String result; if (numerator == 0) //分子为0,结果为0 result = "0"; else if(denominator == 0) //分母不能为0 return "错误!分母不能为0"; else if (denominator == 1) //分母为1,结果取分子值 result = numerator + ""; else result = numerator + "/" + denominator; //按分数形式输出结果 return result; } private void reduce() { if (numerator != 0) { int common = gcd (Math.abs(numerator), denominator); //取分子分母最大公因子 numerator = numerator / common; //约分 denominator = denominator / common; } } private int gcd (int num1, int num2) //计算最大公因子 { if(num2==0) return num1; else return gcd(num2,num1%num2); } public static Fraction obj(){ //生成随机数 Random ran = new Random(); return new Fraction(ran.nextInt(100),ran.nextInt(100)); } }
步骤 | 耗时 | 百分比 |
---|---|---|
需求分析 | 20min | 16% |
设计 | 30min | 24% |
代码实现 | 40min | 32% |
测试 | 20min | 16% |
分析总结 | 15min | 12% |