Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- 夏楚剛 發文到 Java技術與認證交流平台
- 4 小時
- 各位大佬教教我這題怎麼寫
- 我是初學者 作業寫不出來qq 今天就要交1了
- https://www.facebook.com/groups/748837991920629/permalink/1303311146473308/
- Operating System: Windows 10 家用版
- IDE: Eclipse
- Java jdk version: 1.8.0_144
- Java jre version: 1.8.0_144
- java version "1.8.0_144"
- Java(TM) SE Runtime Environment (build 1.8.0_144-b01)
- Java HotSpot(TM) 64-Bit Server VM (build 25.144-b01, mixed mode)
- Questioner: 夏楚剛
- Answerer: Hsiang-Yu, Kuo
- */
- package com.sample;
- import static java.lang.System.out;
- // 分數類別
- class Fraction {
- public int numerator;// 分子
- public int denominator;// 分母
- public Fraction() {
- // 空建構子
- }
- public Fraction(int numerator, int denominator) {
- // 直接在建構子裡面設定分子、分母
- this.numerator = numerator;
- this.denominator = denominator;
- }
- private static int lcm(int a, int b) {
- // 計算最小公倍數的函數
- int answer = 0;
- for (int i = (a * b); i >= 1; i--) {
- if ((i % a) == 0 && (i % b) == 0) {
- answer = i;
- }
- }
- return answer;
- }
- public Fraction add(Fraction fraction) {
- // 分數相加
- // d1d2 == 分母1 跟 分母2 的 最小公倍數
- // n1, n2 == 分子1, 分子2
- // d1, d2 == 分母1, 分母2
- // d3, n3 == 分母3, 分子3
- int n1 = 0, n2 = 0, d1 = 0, d2 = 0, d1d2 = 0, d3 = 0, n3 = 0;
- n1 = this.numerator;
- d1 = this.denominator;
- n2 = fraction.numerator;
- d2 = fraction.denominator;
- d1d2 = Fraction.lcm(d1, d2);
- n3 = n1 * (d1d2 / d1) + n2 * (d1d2 / d2);// 分子
- d3 = d1d2;// 分母
- return new Fraction(n3, d3);
- }
- public Fraction sub(Fraction fraction) {
- // 分數相減
- // d1d2 == 分母1 跟 分母2 的 最小公倍數
- // n1, n2 == 分子1, 分子2
- // d1, d2 == 分母1, 分母2
- // d3, n3 == 分母3, 分子3
- int n1 = 0, n2 = 0, d1 = 0, d2 = 0, d1d2 = 0, d3 = 0, n3 = 0;
- n1 = this.numerator;
- d1 = this.denominator;
- n2 = fraction.numerator;
- d2 = fraction.denominator;
- d1d2 = Fraction.lcm(d1, d2);
- n3 = n1 * (d1d2 / d1) - n2 * (d1d2 / d2);// 分子
- d3 = d1d2;// 分母
- return new Fraction(n3, d3);
- }
- public Fraction mul(Fraction fraction) {
- // 分數相乘
- // n1, n2 == 分子1, 分子2
- // d1, d2 == 分母1, 分母2
- // d3, n3 == 分母3, 分子3
- int n1 = 0, n2 = 0, d1 = 0, d2 = 0, d3 = 0, n3 = 0;
- n1 = this.numerator;
- d1 = this.denominator;
- n2 = fraction.numerator;
- d2 = fraction.denominator;
- n3 = n1 * n2;// 分子
- d3 = d1 * d2;// 分母
- return new Fraction(n3, d3);
- }
- public Fraction div(Fraction fraction) {
- // 分數相除
- // n1, n2 == 分子1, 分子2
- // d1, d2 == 分母1, 分母2
- // d3, n3 == 分母3, 分子3
- int n1 = 0, n2 = 0, d1 = 0, d2 = 0, d3 = 0, n3 = 0;
- n1 = this.numerator;
- d1 = this.denominator;
- n2 = fraction.numerator;
- d2 = fraction.denominator;
- // 因為分數相除等於分數乘以另一個分數的倒數,
- // 所以我直接把另一個分數分子分母對調。
- n3 = n1 * d2;// 分子
- d3 = d1 * n2;// 分母
- return new Fraction(n3, d3);
- }
- public void setN(int numerator) {
- // 設定分子
- this.numerator = numerator;
- }
- public void setD(int denominator) {
- // 設定分母
- this.denominator = denominator;
- }
- public static Fraction compare(Fraction f1, Fraction f2) {
- // 比較傳入的二個分數之間的大小,
- // 回傳數值比較大的分數
- // n1, n2 == 分子1, 分子2
- // d1, d2 == 分母1, 分母2
- // d1d2 == 分母1 跟 分母2 的 最小公倍數
- int n1 = 0, n2 = 0, d1 = 0, d2 = 0, d1d2 = 0;
- n1 = f1.numerator;
- d1 = f1.denominator;
- n2 = f2.numerator;
- d2 = f2.denominator;
- d1d2 = Fraction.lcm(d1, d2);// 回傳最小公倍數
- // 通分-start
- n1 = n1 * (d1d2 / d1);
- d1 = d1d2;
- n2 = n2 * (d1d2 / d2);
- d2 = d1d2;
- // 通分-end
- if (n1 > n2) {
- // 如果分數1的分子大於分數2的分子
- // 回傳分數1
- return f1;
- } else if (n1 < n2) {
- // 如果分數2的分子大於分數1的分子
- // 回傳分數2
- return f2;
- } else {
- out.println("二個分數相等。");
- return f1;
- }
- }
- @Override
- public String toString() {
- // 因為我想直接把印物件出來,所以覆寫父類別 Object 的 toString方法。
- // 取代 show method
- return this.numerator + "/" + this.denominator;
- }
- // public void show() {
- // out.printf("%d/%d", numerator, denominator);
- // }
- }
- public class Project10 {
- public static void main(String[] args) {
- Fraction fa = new Fraction();
- fa.setN(2);
- fa.setD(5);
- Fraction fb = new Fraction();
- fb.setN(3);
- fb.setD(7);
- Fraction fc = new Fraction();
- // 題目1-start
- out.println("/* output--------");
- fc = fa.add(fb);
- out.printf("(%s)+(%s)=%s\n", fa, fb, fc);
- fc = fa.sub(fb);
- out.printf("(%s)-(%s)=%s\n", fa, fb, fc);
- fc = fa.mul(fb);
- out.printf("(%s)*(%s)=%s\n", fa, fb, fc);
- fc = fa.div(fb);
- out.printf("(%s)/(%s)=%s\n", fa, fb, fc);
- out.println("---------------*/");
- // 題目1-end
- out.printf("\n");
- // 題目2-start
- out.println("/* output--------");
- fc = Fraction.compare(fa, fb);
- out.println(fa);
- out.println(fb);
- out.println(fc + " is larger");
- out.println("---------------*/");
- // 題目2-end
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement