Java 实现分数的相加相乘化简 0x01 要求: 设计一个表示分数的类Fraction。这个类用两个int类型的变量分别表示分子和分母。这个类的构造方法是:
Fraction(int a, int b)
构造一个a/b的分数。
这个类要提供以下的功能:
double toDouble();
将分数转换为double
Fraction plus(Fraction r);
将自身和r的分数相加,产生一个新的Fraction的对象。注意小学五年级学过两个分数如何相加。
Fraction multiply(Fraction r);
将自身和r的分数相乘,产生一个新的Fraction的对象。
void print();
将自身以“分子/分母”的形式输出到标准输出,并带有回车换行。
需要考虑以下情况:
当分母为0时,显示“错误,分母不能为0”。
当分子为0时,显示0
当分母为1时,直接显示分子
分数为负数时,负号显示在最前面
分数显示为最简形式。如2/4应该被约分为1/2。
类 Fraction 中可以用以下方法进行约分和调整负号
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 private void yuefen () { int aa = (int ) Math.abs(a); int ab = (int ) Math.abs(b); if (a * b >= 0 ) { a = aa; b = ab; } else { a = -aa; b = ab; } for (int i = ((aa < ab) ? aa : ab); i > 1 ; i--) { if (a % i == 0 && b % i == 0 ) { a /= i; b /= i; break ; } } }
完成Fraction类定义后,使用以下main函数(请勿修改)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 import java.util.Scanner;public class Main { public static void main (String[] args) { Scanner in = new Scanner (System.in); Fraction a = new Fraction (in.nextInt(), in.nextInt()); Fraction b = new Fraction (in.nextInt(),in.nextInt()); a.print(); b.print(); a.plus(b).print(); a.multiply(b).plus(new Fraction (5 ,6 )).print(); a.print(); b.print(); in.close(); } }
注意,你的类的定义应该这样开始:
class Fraction {
也就是说,在你的类的class前面不要有public。
输入格式:程序运行时会输入4个数字,分别构成两个分数,依次是分子和分母。
输出格式:输出由上面的 main 函数完成,不需要额外编写代码。
输入样例:
输出样例:
1 2 3 4 5 6 7 8 9 10 11 1/2 1/3 5/6 1 1/2 1/3
0x02 代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 import java.util.Scanner;class Fraction { private int a; private int b; public Fraction (int a, int b) { this .a = a; this .b = b; } public Fraction () { } public void print () { if (a == b && a !=0 ){ System.out.println(1 ); return ; } if (b == 1 ){ System.out.println(a); return ; } if (b == 0 ){ System.out.println("错误,分母不能为0" ); return ; } this .yueFen(); System.out.println(a+"/" +b); } public double toDouble () { return (double ) a/(double ) b; } public Fraction plus (Fraction fraction) { Fraction fraction1 = new Fraction (); fraction1.b = this .b * fraction.b; fraction1.b = fraction1.b/GCD(this .b, fraction.b); fraction1.a = ((this .a* fraction.b)+(fraction.a*this .b))/GCD(this .b, fraction.b); return fraction1; } public Fraction multiply (Fraction fraction) { return new Fraction ((this .a* fraction.a),(this .b* fraction.b)); } private int GCD (int a,int b) { int min = a<b?a:b; int gcd = 1 ; for (int i = min;i >= 1 ;i --) { if (a%i == 0 && b%i == 0 ) { gcd = i; break ; } } return gcd; } private void yueFen () { int aa = (int ) Math.abs(a); int bb = (int ) Math.abs(b); if (a*b >=0 ){ a = aa; b = bb; }else { a = -aa; b = bb; } for (int i = (Math.min(aa, bb)); i >1 ; i--){ if (a % i ==0 &&b%i==0 ){ a/=i; b/=i; break ; } } } } public class Main { public static void main (String[] args) { Scanner in = new Scanner (System.in); Fraction a = new Fraction (in.nextInt(),in.nextInt()); Fraction b = new Fraction (in.nextInt(),in.nextInt()); a.print(); b.print(); a.plus(b).print(); a.multiply(b).plus(new Fraction (5 ,6 )).print(); a.print(); b.print(); in.close(); } }