Advertisement
Guest User

Untitled

a guest
Dec 17th, 2017
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.08 KB | None | 0 0
  1. /*
  2.  * Eric Liu
  3.  * Mr. Peterson
  4.  * APCS Period 3
  5.  * 15 December 2017
  6.  */
  7.  
  8. public class Fraction {
  9.     private int denominator;
  10.     private int numerator;
  11.     public Fraction() {
  12.         numerator = 1;
  13.         denominator = 0;
  14.     }
  15.     public Fraction(String input) {
  16.         int slash = 0;
  17.         int neg = 1;
  18.         String blah = "+-";
  19.        
  20.         if(input.charAt(0) == blah.charAt(0) ||input.charAt(0) == blah.charAt(1)) {
  21.             if(input.charAt(0) == blah.charAt(1)) {
  22.                 neg = -1;
  23.             }
  24.             input = input.substring(1);
  25.         }
  26.         for(int i = 0; i <= input.length() - 1; i++) {
  27.             if(input.charAt(i) == '/') {
  28.                 break;
  29.             }
  30.             slash++;
  31.         }
  32.         numerator = Integer.parseInt(input.substring(0, slash));
  33.         denominator = Integer.parseInt(input.substring(slash + 1));
  34.         numerator *= neg;
  35.    
  36.         reduce();
  37.     }
  38.     public Fraction(int num) {
  39.         numerator = num;
  40.         denominator = 1;
  41.     }
  42.     public Fraction(int num, int denom) {
  43.         numerator = (denom < 0 ? -num : num);
  44.         if(denominator == 0) {
  45.            
  46.         }
  47.         denominator = (denom < 0 ? -denom : denom);
  48.         reduce();
  49.     }
  50.     public void setNumerator(int num) {
  51.         numerator = num;
  52.         reduce();
  53.     }
  54.     public int getNumerator() {
  55.         return numerator;
  56.     }
  57.     public void setDenominator(int denom) {
  58.         if(denom > 0) {
  59.             denominator = denom;
  60.             reduce();
  61.         }
  62.         else if(denom < 0) {
  63.             numerator = -numerator;
  64.             denominator = -denom;
  65.             reduce();
  66.         }
  67.     }
  68.     public int getDenominator() {
  69.         return denominator;
  70.     }
  71.    
  72.     public Fraction add(Fraction f) {
  73.         f.reduce();
  74.         Fraction sum = new Fraction();
  75.         sum.denominator = denominator * f.denominator;
  76.         sum.numerator =  (numerator * f.denominator + denominator * f.numerator);
  77.         sum.reduce();
  78.         return sum;
  79.     }
  80.     public Fraction subtract(Fraction f) {
  81.         f.reduce();
  82.         Fraction result = new Fraction();
  83.         result.numerator = numerator * f.denominator - f.numerator * denominator;
  84.         result.denominator = denominator * f.denominator;
  85.         result.reduce();
  86.         return result;
  87.     }
  88.     public Fraction multiply(Fraction f) {
  89.         f.reduce();
  90.         Fraction result = new Fraction();
  91.         result.numerator = numerator * f.numerator;
  92.         result.denominator = denominator * f.denominator;
  93.         result.reduce();
  94.         return result;
  95.     }
  96.     public Fraction divide(Fraction f) {
  97.         f.reduce();
  98.         Fraction result = new Fraction();
  99.         if(f.numerator == 0) {
  100.             throw new IllegalArgumentException("Cannot divide by 0");
  101.         }
  102.         result.numerator = numerator * f.denominator;
  103.         result.denominator = denominator * f.numerator;
  104.         result.reduce();
  105.         if(result.denominator < 0 && result.numerator < 0) {
  106.             result.denominator *= -1;
  107.             result.numerator *= -1;
  108.         }
  109.         return result;
  110.     }
  111.     public String toString() {
  112.         if(numerator == 0) {
  113.             return "0";
  114.         }
  115.         else if(denominator == 1) {
  116.             return "" + numerator;
  117.         }
  118.         return numerator + "/" + denominator;
  119.     }
  120.     public String toMixedNumberString() {
  121.         int wholeNum = 0;
  122.         if(numerator > denominator) {
  123.             wholeNum = numerator / denominator;
  124.             numerator -= denominator * wholeNum;
  125.             if(numerator == 0) {
  126.                 return "" + wholeNum;
  127.             }
  128.             return "" + wholeNum + "_" + numerator + "/" + denominator;
  129.         }
  130.         else if((numerator*-1) > denominator && numerator < 0) {
  131.             numerator *= -1;
  132.             if(denominator < 0) {
  133.                 denominator *= -1;
  134.             }
  135.             wholeNum = numerator / denominator;
  136.             numerator -= denominator * wholeNum;
  137.             if(numerator == 0) {
  138.                 return "-" + wholeNum;
  139.             }
  140.             return "-" + wholeNum + "_" + numerator + "/" + denominator;
  141.         }
  142.         if(denominator == 1)return numerator + "";
  143.         return numerator + "/" + denominator;
  144.     }
  145.     public int compareTo(Fraction f) {
  146.         int n = numerator * f.denominator;
  147.         int newn = f.numerator * denominator;
  148.         return n - newn;
  149.     }
  150.     private void reduce() {
  151.         int n = numerator, d = denominator, largest;
  152.         if(numerator < 0) {
  153.             n = -numerator;
  154.         }
  155.         if(n > d) {
  156.             largest = n;
  157.         }
  158.         else {
  159.             largest = d;
  160.         }
  161.         int gcd = 0;
  162.         for(int i = largest; i >= 2; i--) {
  163.             if(numerator % i == 0 && denominator % i == 0) {
  164.                 gcd = i;
  165.                 break;
  166.             }
  167.         }
  168.         if(gcd != 0) {
  169.             numerator /= gcd;
  170.             denominator /= gcd;
  171.         }
  172.        
  173.         if(denominator < 0){
  174.             denominator *= -1;
  175.             numerator *= -1;
  176.         }
  177.     }
  178. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement