文章出處

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");
    }
 

文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()