zoukankan      html  css  js  c++  java
  • lab2打卡

    主要熟悉了JAVA之中this的用法,以及按照提示的scheme写出辗转相除法的递归算法。

    代码如下:

      1 package lab2;
      2 /* Fraction.java */
      3 
      4 import java.io.*;
      5 
      6 /** The Fraction class implements nonnegative fractions--rational numbers.
      7  */
      8 class Fraction {
      9 
     10   /* private fields within a Fraction. */
     11   private int numberOfFractions = 0;
     12 
     13   private int numerator;
     14   private int denominator;
     15 
     16   /** Constructs a Fraction n/d. 
     17    *  @param n is the numerator.  Must be nonnegative.
     18    *  @param d is the denominator.  Must be positive.
     19    */
     20   public Fraction(int n, int d) {
     21     if (n < 0) {
     22       System.out.println("Fatal error:  Negative numerator.");
     23       System.exit(0);
     24     }
     25     if (d < 1) {
     26       System.out.println("Fatal error:  Non-positive denominator.");
     27       System.exit(0);
     28     }
     29     numberOfFractions++;
     30     numerator = n; 
     31     denominator = d;
     32   }
     33 
     34   /** Constructs a Fraction n/1. 
     35    *  @param n is the numerator.  Must be nonnegative.
     36    */
     37   public Fraction(int n) {
     38     this(n, 1);
     39   }
     40 
     41   /** Constructs a Fraction 0/1. 
     42    */
     43   public Fraction() {
     44     this(0, 1);//Part I:Constructor
     45   }
     46 
     47   /** Copies the Fraction "original".
     48    */
     49   public Fraction(Fraction original) {
     50     numberOfFractions++;
     51     numerator = 0;
     52     denominator = 1;
     53   }
     54 
     55   /** Converts this Fraction to a string format:  "numerator/denominator."
     56    *  Fractions should be printed in reduced form (part of your assignment is
     57    *  to make this true).
     58    *  @return a String representation of this Fraction.
     59    */
     60   public String toString() {
     61     int thisGcd = gcd(numerator, denominator);
     62 
     63     return (numerator / thisGcd + "/" + denominator / thisGcd);
     64   }
     65 
     66   /** Return the sum of two fractions.
     67    *  @param f2 is the Fraction to be added.
     68    *  @return the result of adding f2 to this Fraction.
     69    */
     70   public Fraction add(Fraction f2) {
     71     Fraction r = new Fraction((numerator * f2.denominator) +
     72                   (f2.numerator * denominator),
     73                   denominator * f2.denominator);
     74     return r;
     75   }
     76 
     77   /** Replaces this Fraction's numerator with a new value.
     78    *  @param numerator is the new numerator.  Must be nonnegative.
     79    */
     80   public void changeNumerator(int numerator) { // DO NOT CHANGE THIS SIGNATURE!
     81     // Fix the bug that prevents this method from working correctly.
     82     if (numerator < 0) {
     83       System.out.println("Fatal error:  Negative numerator.");
     84       System.exit(0);
     85     }
     86     this.numerator = numerator;//PART III: Defining Classes; 
     87   }
     88 
     89   /** Returns the number of Fraction objects in existence.
     90    *  @return the number of Fraction objects in existence.
     91    */
     92   public int fracs() {                         // DO NOT CHANGE THIS SIGNATURE!
     93     // Fix the bug that prevents this method from working correctly.
     94     return numberOfFractions;
     95   }
     96 
     97   /** Computes the greatest common divisor (gcd) of the two inputs.
     98    * @param x must be nonnegative
     99    * @param y must be nonnegative
    100    * @return the gcd of x and y
    101    */
    102   static private int gcd (int x, int y) {
    103     /* Replace the following line with your solution. */
    104     if(y==0) 
    105     return x;
    106     else
    107         return gcd(y,x%y);//PART IV:Conditionals and Recursive Functions
    108   }
    109 
    110   /** Put the Fraction class through some tests.
    111    * @param argv is not used.
    112    */
    113   public static void main(String[] argv) {
    114 
    115     /* Test all four contructors and toString. */
    116     Fraction f0 = new Fraction();
    117     Fraction f1 = new Fraction(3);
    118     Fraction f2 = new Fraction(12, 20);
    119     Fraction f3 = new Fraction(f2);
    120 
    121     System.out.println("
    Testing constructors and toString():");
    122     System.out.println("The fraction f0 is " + f0.toString());
    123     System.out.println("The fraction f1 is " + f1);    // toString is implicit.
    124     System.out.println("The fraction f2 is " + f2);
    125     System.out.println("The fraction f3 is " + f3 + ", which should equal f2");
    126 
    127     /* Test the add method. */
    128     System.out.println("
    Testing add:");
    129     Fraction sumOfTwo = f1.add(f2);              // Sum of f1 and f2.
    130     Fraction sumOfThree = f0.add(f1).add(f2);             // Sum of f0, f1, and f2.
    131 
    132     System.out.println("The sum of " + f1 + " and " + f2 + " is " + sumOfTwo);
    133     System.out.println("The sum of " + f0 + ", " + f1 + " and " + f2 + " is " +
    134                        sumOfThree);  //PART II:Using objects
    135    
    136     /* Test the methods used in Part III. */
    137     System.out.println("
    Testing changeNumerator and fracs:");
    138 
    139     f3.changeNumerator(7);
    140     System.out.println("Now f3 is " + f3 + ", which should be 7/20");
    141     System.out.println("The total number of Fraction objects is " +
    142                        f3.fracs());
    143 
    144     /* Test gcd function (static method). */
    145     System.out.println("
    Testing gcd:");
    146     System.out.println("The gcd of 2 and 10 is: " + gcd(2, 10));
    147     System.out.println("The gcd of 15 and 5 is: " + gcd(15, 5));
    148     System.out.println("The gcd of 24 and 18 is: " + gcd(24, 18));
    149     System.out.println("The gcd of 10 and 10 is: " + gcd(10, 10));
    150     System.out.println("The gcd of 21 and 400 is: " + gcd(21, 400));
    151   }
    152 }
    View Code

    运行结果:

  • 相关阅读:
    Java安全之JNDI注入
    Visual Studio 2019 升级16.8之后(升级.Net 5),RazorTagHelper任务意外失败
    .Net Core 3.1升级 .Net 5后出现代码错误 rzc generate exited with code 1.
    重走py 之路 ——普通操作与函数(三)
    重走py 之路 ——字典和集合(二)
    设计模式结(完结篇)
    重走py 之路 ——列表(一)
    RestfulApi 学习笔记——分页和排序(五)
    RestfulApi 学习笔记——查询与过滤还有搜索(五)
    Android开发 Error:The number of method references in a .dex file cannot exceed 64K.Android开发 Error:The number of method references in a .dex file cannot exceed 64K
  • 原文地址:https://www.cnblogs.com/jxtang/p/7191102.html
Copyright © 2011-2022 走看看