5.2 测试与封装
//源代码 package avshabi; import java.util.StringTokenizer; public class Calculator { int numerator; // 分子 int denominator; // 分母 Calculator(){ } Calculator(int a,int b){ if(a == 0){ numerator = 0; denominator = 1; } else{ setNumeratorAndDenominator(a,b); } } void setNumeratorAndDenominator(int a, int b){ // 设置分子和分母 int c = f(Math.abs(a),Math.abs(b)); // 计算最大公约数 numerator = a / c; denominator = b / c; if(numerator<0 && denominator<0){ numerator = - numerator; denominator = - denominator; } } int getNumerator(){ return numerator; } int getDenominator(){ return denominator; } int f(int a,int b){ // 求a和b的最大公约数 if(a < b){ int c = a; a = b; b = c; } int r = a % b; while(r != 0){ a = b; b = r;; r = a % b; } return b; } Calculator add(Calculator r){ // 加法运算 int a = r.getNumerator(); int b = r.getDenominator(); int newNumerator = numerator * b + denominator * a; int newDenominator = denominator * b; Calculator result = new Calculator(newNumerator,newDenominator); return result; } Calculator sub(Calculator r){ // 减法运算 int a = r.getNumerator(); int b = r.getDenominator(); int newNumerator = numerator * b - denominator * a; int newDenominator = denominator * b; Calculator result = new Calculator(newNumerator,newDenominator); return result; } Calculator muti(Calculator r){ // 乘法运算 int a = r.getNumerator(); int b = r.getDenominator(); int newNumerator = numerator * a; int newDenominator = denominator * b; Calculator result = new Calculator(newNumerator,newDenominator); return result; } Calculator div(Calculator r){ // 除法运算 int a = r.getNumerator(); int b = r.getDenominator(); int newNumerator = numerator * b; int newDenominator = denominator * a; Calculator result = new Calculator(newNumerator,newDenominator); return result; } // 封装了具体运算,主要为对输入进行转换,对输出封装 public static void compute(String data1,String operation,String data2){ StringTokenizer fenxi = new StringTokenizer(data1,"/"); int data1_1 = Integer.parseInt(fenxi.nextToken()); int data1_2 = Integer.parseInt(fenxi.nextToken()); fenxi = new StringTokenizer(data2,"/"); int data2_1 = Integer.parseInt(fenxi.nextToken()); int data2_2 = Integer.parseInt(fenxi.nextToken()); Calculator r1 = new Calculator(data1_1,data1_2); Calculator r2 = new Calculator(data2_1,data2_2); Calculator result; int a,b; 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); } } } // 测试类 package avshabi; import java.util.Scanner; public class TestCal { public static void main(String[] args) { // TODO Auto-generated method stub // 用户输入两分数和运算符 Scanner input = new Scanner(System.in); System.out.println("请用户输入第一个分数(格式a/b)"); String data1 = input.next(); System.out.println("请用户输入要进行运算的运算符(+-*/)"); String operation = input.next(); System.out.println("请用户输入第二个分数(格式c/d)"); String data2 = input.next(); // 根据用户输入进行具体运算 Calculator cal = new Calculator(); System.out.println("运算结果为:"); cal.compute(data1, operation, data2); // } } } //JUINT测试应用举例 package avshabi; import static org.junit.Assert.*; import org.junit.Test; public class CalculatorTest { Calculator cal = new Calculator(); @Test public void testSetNumeratorAndDenominator() { cal.setNumeratorAndDenominator(2, 3); } @Test public void testF() { cal.f(1, 2); } @Test public void testSub() { cal.sub(cal); } @Test public void testCompute() { cal.compute("1/2", "+", "1/3"); } }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· C++代码改造为UTF-8编码问题的总结
· DeepSeek 解答了困扰我五年的技术问题
· 为什么说在企业级应用开发中,后端往往是效率杀手?
· 用 C# 插值字符串处理器写一个 sscanf
· Java 中堆内存和栈内存上的数据分布和特点
· 为DeepSeek添加本地知识库
· 精选4款基于.NET开源、功能强大的通讯调试工具
· DeepSeek智能编程
· 大模型工具KTransformer的安装
· [计算机/硬件/GPU] 显卡