• 作业5.1


     //运算类封装
    
    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);
    //    }    
    }
    }

     

          我们的作业在之前的基础上修改了数据为分数,保留原来的加减乘除四个功能,并成功的由c转换成Java的努力尝试,修改大概花了4个多小时,让程序变得有意思。 不过我发现会出现错误,容错功能不太好,捕获异常做的不好,纵使经过我努力修改,仍然有不足之处,但是至少让运算数据提升为分数了。

    结对同伴:

     

    姓名

    学号

    博客地址

    领航员       侯圣燊

    201306114402

     

    http://home.cnblogs.com/u/sihouzi/

     

    驾驶员          陈其林

    201306114409

    http://www.cnblogs.com/chaney/

  • 相关阅读:
    深度分析:SpringBoot异常捕获与封装处理,看完你学会了吗?
    去年去阿里面试,面试官居然问我Java类和对象,我是这样回答的!
    面试官:小伙子,你给我详细说一下线程的状态有哪些吧?
    新鲜出炉!JAVA线程池精华篇深度讲解,看完你还怕面试被问到吗?
    面试官:小伙子,你给我讲一下java类加载机制和内存模型吧
    深度分析:面试90%被问到的多线程、创建线程、线程状态、线程安全,一次性帮你全搞定!
    close与shutdown
    select模型(二 改进服务端)
    select模型(一 改进客户端)
    5种IO模型
  • 原文地址:https://www.cnblogs.com/sihouzi/p/4466639.html
Copyright © 2020-2023  润新知