Advertisement
chawks312

Untitled

Dec 17th, 2017
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.96 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. return numerator + "/" + denominator;
  143. }
  144. public int compareTo(Fraction f) {
  145. int n = numerator * f.denominator;
  146. int newn = f.numerator * denominator;
  147. return n - newn;
  148. }
  149. private void reduce() {
  150. int n = numerator, d = denominator, largest;
  151. if(numerator < 0) {
  152. n = -numerator;
  153. }
  154. if(n > d) {
  155. largest = n;
  156. }
  157. else {
  158. largest = d;
  159. }
  160. int gcd = 0;
  161. for(int i = largest; i >= 2; i--) {
  162. if(numerator % i == 0 && denominator % i == 0) {
  163. gcd = i;
  164. break;
  165. }
  166. }
  167. if(gcd != 0) {
  168. numerator /= gcd;
  169. denominator /= gcd;
  170. }
  171. }
  172. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement