作业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 {
 
     @Test
     public  void  testAdd() {
         Calculator cal =  new  Calculator();
         cal.add(cal);
     }
 
     @Test
     public  void  testSub() {
         Calculator cal =  new  Calculator();
         cal.sub(cal);
     }
 
     @Test
     public  void  testMuti() {
         Calculator cal =  new  Calculator();
         cal.muti(cal);
     }
 
     @Test
     public  void  testDiv() {
         Calculator cal =  new  Calculator();
         cal.div(cal);
     }
 
     @Test
     public  void  testCompute() {
         Calculator cal =  new  Calculator();
         cal.compute( "1/2" "+" "2/3" );
         cal.compute( "1/2" "-" "2/3" );
         cal.compute( "1/2" "*" "2/3" );
         cal.compute( "1/2" "/" "2/3" );
     }
 

转载于:https://www.cnblogs.com/l201306114321/p/4488554.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值