Advertisement
KuoHsiangYu

Project10

Mar 20th, 2019
176
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.32 KB | None | 0 0
  1. /*
  2. 夏楚剛‎ 發文到 Java技術與認證交流平台
  3. 4 小時
  4. 各位大佬教教我這題怎麼寫
  5. 我是初學者 作業寫不出來qq 今天就要交1了
  6. https://www.facebook.com/groups/748837991920629/permalink/1303311146473308/
  7.  
  8. Operating System: Windows 10 家用版
  9. IDE: Eclipse
  10. Java jdk version: 1.8.0_144
  11. Java jre version: 1.8.0_144
  12. java version "1.8.0_144"
  13. Java(TM) SE Runtime Environment (build 1.8.0_144-b01)
  14. Java HotSpot(TM) 64-Bit Server VM (build 25.144-b01, mixed mode)
  15. Questioner: 夏楚剛‎
  16. Answerer: Hsiang-Yu, Kuo
  17. */
  18. package com.sample;
  19.  
  20. import static java.lang.System.out;
  21.  
  22. // 分數類別
  23. class Fraction {
  24.     public int numerator;// 分子
  25.     public int denominator;// 分母
  26.  
  27.     public Fraction() {
  28.         // 空建構子
  29.     }
  30.  
  31.     public Fraction(int numerator, int denominator) {
  32.         // 直接在建構子裡面設定分子、分母
  33.         this.numerator = numerator;
  34.         this.denominator = denominator;
  35.     }
  36.  
  37.     private static int lcm(int a, int b) {
  38.         // 計算最小公倍數的函數
  39.         int answer = 0;
  40.         for (int i = (a * b); i >= 1; i--) {
  41.             if ((i % a) == 0 && (i % b) == 0) {
  42.                 answer = i;
  43.             }
  44.         }
  45.         return answer;
  46.     }
  47.  
  48.     public Fraction add(Fraction fraction) {
  49.         // 分數相加
  50.         // d1d2 == 分母1 跟 分母2 的 最小公倍數
  51.         // n1, n2 == 分子1, 分子2
  52.         // d1, d2 == 分母1, 分母2
  53.         // d3, n3 == 分母3, 分子3
  54.         int n1 = 0, n2 = 0, d1 = 0, d2 = 0, d1d2 = 0, d3 = 0, n3 = 0;
  55.         n1 = this.numerator;
  56.         d1 = this.denominator;
  57.         n2 = fraction.numerator;
  58.         d2 = fraction.denominator;
  59.         d1d2 = Fraction.lcm(d1, d2);
  60.         n3 = n1 * (d1d2 / d1) + n2 * (d1d2 / d2);// 分子
  61.         d3 = d1d2;// 分母
  62.         return new Fraction(n3, d3);
  63.     }
  64.  
  65.     public Fraction sub(Fraction fraction) {
  66.         // 分數相減
  67.         // d1d2 == 分母1 跟 分母2 的 最小公倍數
  68.         // n1, n2 == 分子1, 分子2
  69.         // d1, d2 == 分母1, 分母2
  70.         // d3, n3 == 分母3, 分子3
  71.         int n1 = 0, n2 = 0, d1 = 0, d2 = 0, d1d2 = 0, d3 = 0, n3 = 0;
  72.         n1 = this.numerator;
  73.         d1 = this.denominator;
  74.         n2 = fraction.numerator;
  75.         d2 = fraction.denominator;
  76.         d1d2 = Fraction.lcm(d1, d2);
  77.         n3 = n1 * (d1d2 / d1) - n2 * (d1d2 / d2);// 分子
  78.         d3 = d1d2;// 分母
  79.         return new Fraction(n3, d3);
  80.     }
  81.  
  82.     public Fraction mul(Fraction fraction) {
  83.         // 分數相乘
  84.         // n1, n2 == 分子1, 分子2
  85.         // d1, d2 == 分母1, 分母2
  86.         // d3, n3 == 分母3, 分子3
  87.         int n1 = 0, n2 = 0, d1 = 0, d2 = 0, d3 = 0, n3 = 0;
  88.         n1 = this.numerator;
  89.         d1 = this.denominator;
  90.         n2 = fraction.numerator;
  91.         d2 = fraction.denominator;
  92.         n3 = n1 * n2;// 分子
  93.         d3 = d1 * d2;// 分母
  94.         return new Fraction(n3, d3);
  95.     }
  96.  
  97.     public Fraction div(Fraction fraction) {
  98.         // 分數相除
  99.         // n1, n2 == 分子1, 分子2
  100.         // d1, d2 == 分母1, 分母2
  101.         // d3, n3 == 分母3, 分子3
  102.         int n1 = 0, n2 = 0, d1 = 0, d2 = 0, d3 = 0, n3 = 0;
  103.         n1 = this.numerator;
  104.         d1 = this.denominator;
  105.         n2 = fraction.numerator;
  106.         d2 = fraction.denominator;
  107.         // 因為分數相除等於分數乘以另一個分數的倒數,
  108.         // 所以我直接把另一個分數分子分母對調。
  109.         n3 = n1 * d2;// 分子
  110.         d3 = d1 * n2;// 分母
  111.         return new Fraction(n3, d3);
  112.     }
  113.  
  114.     public void setN(int numerator) {
  115.         // 設定分子
  116.         this.numerator = numerator;
  117.     }
  118.  
  119.     public void setD(int denominator) {
  120.         // 設定分母
  121.         this.denominator = denominator;
  122.     }
  123.  
  124.     public static Fraction compare(Fraction f1, Fraction f2) {
  125.         // 比較傳入的二個分數之間的大小,
  126.         // 回傳數值比較大的分數
  127.         // n1, n2 == 分子1, 分子2
  128.         // d1, d2 == 分母1, 分母2
  129.         // d1d2 == 分母1 跟 分母2 的 最小公倍數
  130.         int n1 = 0, n2 = 0, d1 = 0, d2 = 0, d1d2 = 0;
  131.         n1 = f1.numerator;
  132.         d1 = f1.denominator;
  133.         n2 = f2.numerator;
  134.         d2 = f2.denominator;
  135.         d1d2 = Fraction.lcm(d1, d2);// 回傳最小公倍數
  136.         // 通分-start
  137.         n1 = n1 * (d1d2 / d1);
  138.         d1 = d1d2;
  139.         n2 = n2 * (d1d2 / d2);
  140.         d2 = d1d2;
  141.         // 通分-end
  142.         if (n1 > n2) {
  143.             // 如果分數1的分子大於分數2的分子
  144.             // 回傳分數1
  145.             return f1;
  146.         } else if (n1 < n2) {
  147.             // 如果分數2的分子大於分數1的分子
  148.             // 回傳分數2
  149.             return f2;
  150.         } else {
  151.             out.println("二個分數相等。");
  152.             return f1;
  153.         }
  154.     }
  155.  
  156.     @Override
  157.     public String toString() {
  158.         // 因為我想直接把印物件出來,所以覆寫父類別 Object 的 toString方法。
  159.         // 取代 show method
  160.         return this.numerator + "/" + this.denominator;
  161.     }
  162.     // public void show() {
  163.     // out.printf("%d/%d", numerator, denominator);
  164.     // }
  165. }
  166.  
  167. public class Project10 {
  168.     public static void main(String[] args) {
  169.         Fraction fa = new Fraction();
  170.         fa.setN(2);
  171.         fa.setD(5);
  172.  
  173.         Fraction fb = new Fraction();
  174.         fb.setN(3);
  175.         fb.setD(7);
  176.  
  177.         Fraction fc = new Fraction();
  178.  
  179.         // 題目1-start
  180.         out.println("/* output--------");
  181.         fc = fa.add(fb);
  182.         out.printf("(%s)+(%s)=%s\n", fa, fb, fc);
  183.  
  184.         fc = fa.sub(fb);
  185.         out.printf("(%s)-(%s)=%s\n", fa, fb, fc);
  186.  
  187.         fc = fa.mul(fb);
  188.         out.printf("(%s)*(%s)=%s\n", fa, fb, fc);
  189.  
  190.         fc = fa.div(fb);
  191.         out.printf("(%s)/(%s)=%s\n", fa, fb, fc);
  192.         out.println("---------------*/");
  193.         // 題目1-end
  194.  
  195.         out.printf("\n");
  196.  
  197.         // 題目2-start
  198.         out.println("/* output--------");
  199.         fc = Fraction.compare(fa, fb);
  200.         out.println(fa);
  201.         out.println(fb);
  202.         out.println(fc + " is larger");
  203.         out.println("---------------*/");
  204.         // 題目2-end
  205.     }
  206. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement