• 5.2 测试与封装 46


    //源代码
    
    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");
        }
    
    }

  • 相关阅读:
    orm操作
    模板语言
    路由
    newlib中printf库函数的实现
    调试问题记录
    GCC部分编译选项解析
    Lauterbach TRACE32使用技巧记录
    ARM32 页表映射过程
    TTBR0与TTBR1
    Camera Sensor基础知识
  • 原文地址:https://www.cnblogs.com/qq1076529919/p/4488295.html
Copyright © 2020-2023  润新知