zoukankan      html  css  js  c++  java
  • 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);
    //    }    
    }
    }

    成员    刘芮熔201306114444  http://www.cnblogs.com/ruishao13

              罗伟业201306114446  http://www.cnblogs.com/qq1076529919/

  • 相关阅读:
    非foreach情况下取某一节点的position()
    MorningSale 介绍
    XSLT中的内容自动换列
    十年相伴一首歌
    Navicat的强大自动定时备份
    Xshell6评估期已过的解决方法
    Ext JS继承: 关于object, constructor和prototype
    WCF+Silverlight 异常处理
    Adding/removing fields and columns drag & drop bug's fix
    WCF部署至IIS问题二则
  • 原文地址:https://www.cnblogs.com/ruishao13/p/4477608.html
Copyright © 2011-2022 走看看