文章出處
文章列表
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"
);
}
文章列表
全站熱搜