构造一个RationalNumber类:
package exercise;
public class RationalNumber {
int numerator;
int denominator;
// 创建 RationalNumber 对象的构造函数, 其中分母 denominator 不能为 0,否则抛出 IllegalArgumentException 异常.
public RationalNumber (int numerator, int denominator){
this.numerator = numerator;
this.denominator = denominator;
if ( denominator == 0 ){
throw new IllegalArgumentException(); // 抛出异常
}
}
// 创建表示分数 0/1 的 RationalNumber
public RationalNumber(){
this.numerator = 0;
this.denominator = 1;
}
// 返回分数的分子
public int getNumerator(){
return numerator;
}
// 返回分数的分母
public int getDenominator(){
return denominator;
}
// 对分数化为最简式
public static RationalNumber DivideNumber(int numerator,int denominator){
// 正负号化简
if(numerator<0 && denominator<0){
numerator = -numerator;
denominator = -denominator;
}else if(numerator > 0 && denominator < 0){
numerator = -numerator;
denominator = -denominator;
}
// 消去最大公因子
int k = Math.min(numerator,denominator);
while(numerator%k != 0 || denominator%k != 0){
k--;
}
RationalNumber Divide_Number = new RationalNumber(numerator/k,denominator/k);
return Divide_Number;
}
// 对两个分数进行比较,如果相等返回 true,否则返回 false
public boolean equals (RationalNumber other){
DivideNumber(numerator,denominator);
DivideNumber(other.numerator,other.denominator);
return(numerator==other.numerator && denominator==other.denominator);
}
// 返回两个分数的和
public RationalNumber add(RationalNumber other){
int add_denominator = denominator*other.denominator;
int add_numerator = numerator*other.denominator + other.numerator*denominator;
return DivideNumber(add_numerator,add_denominator);
}
// 返回分数的差
public RationalNumber sub(RationalNumber other){
int add_denominator = denominator*other.denominator;
int add_numerator = numerator*other.denominator - other.numerator*denominator;
return DivideNumber(add_numerator,add_denominator);
}
// 对两个分数做乘运算
public RationalNumber multiply(RationalNumber other){
int mul_denominator = denominator*other.denominator;
int mul_numerator = numerator*other.numerator;
return DivideNumber(mul_numerator,mul_denominator);
}
// 对两个分数做除运算
public RationalNumber divide(RationalNumber other){
int div_denominator = denominator*other.numerator;
int div_numerator = numerator*other.denominator;
return DivideNumber(div_numerator,div_denominator);
}
// 返回表示分数的字符串
public String toString(RationalNumber number){
if(denominator==1){
return Integer.toString(number.getNumerator()); // 将整数转化为字符串类型
}else{
String s1 = Integer.toString(number.getNumerator());
String s2 = Integer.toString(number.getDenominator());
return s1+"/"+s2;
}
}
}
主程序实现:
package exercise_class;
import java.util.*;
public class RationalNumberMain {
public static void main(String[] args){
Scanner in = new Scanner(System.in);
String go_on = "y";
while(go_on.equals("y")) {
count();
System.out.println("again?:(y/n)");
go_on = in.next();
}
}
public static void count(){
System.out.println("--------------------------------------------------------------------");
Scanner in = new Scanner(System.in);
System.out.println("Please input the first rational number with the format \"a b\".");
int n1 = in.nextInt();
int d1 = in.nextInt();
RationalNumber number1 = new RationalNumber(n1,d1);
System.out.println("Please input the operator.");
String operator = in.next();
System.out.println("Please input the second rational number with the format \"c d\".");
int n2 = in.nextInt();
int d2 = in.nextInt();
RationalNumber number2 = new RationalNumber(n2,d2);
String result;
if (operator.equals("+")){
RationalNumber number_done = number1.add(number2);
result = number_done.toString(number_done);
System.out.println(number_done.getNumerator()+"/"+number_done.getDenominator());
}else if (operator.equals("-")){
RationalNumber number_done = number1.sub(number2);
result = number_done.toString(number_done);
}else if (operator.equals("*")){
RationalNumber number_done = number1.multiply(number2);
result = number_done.toString(number_done);
}else{
RationalNumber number_done = number1.divide(number2);
result = number_done.toString(number_done);
}
System.out.println(n1+"/"+d1+" "+operator+" "+n2+"/"+d2+" = "+result);
System.out.println("--------------------------------------------------------------------");
}
}
运行结果示例: