Advertisement
Guest User

Untitled

a guest
Nov 24th, 2014
189
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.63 KB | None | 0 0
  1.  
  2. public class Fraction {
  3. private int numerator = 0;
  4. private int denominator = 1;
  5.  
  6. public Fraction(int whole, int numer, int denom) { //3 params
  7. if (denom==0) {
  8. throw new IllegalArgumentException("Your denominator can't be zero!");
  9. }
  10. else if (denom<0) {
  11. numer*=-1;
  12. denom*=-1;
  13. }
  14.  
  15. if (numer<0) {
  16. throw new IllegalArgumentException("Your numerator can't be negative!");
  17. }
  18.  
  19. int numerator = whole * denom + numer;
  20. int denominator = denom;
  21.  
  22. int gcd = gcd(numerator, denominator);
  23.  
  24. numerator /= gcd;
  25. denominator /=gcd;
  26. }
  27. public Fraction(int numer, int denom) { //2 params
  28. if (denom==0) {
  29. throw new IllegalArgumentException("You can't divide by zero!");
  30. }
  31. else if (denom<0) {
  32. numer*=-1;
  33. denom*=-1;
  34. }
  35.  
  36. numerator = numer;
  37. denominator = denom;
  38.  
  39. int gcd = gcd(numerator, denominator);
  40.  
  41. numerator /= gcd;
  42. denominator /=gcd;
  43. }
  44. public Fraction(int whole) { //1 param, whole number
  45. numerator = whole;
  46. denominator = 1;
  47. }
  48. public Fraction(String st) { //why did you type a string ): WORK ON THISSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS
  49. String s=st;
  50. int under = getIndex(s,'_');
  51. int div = getIndex(s,'/');
  52.  
  53. int numer=0;
  54. int denom=0;
  55.  
  56. if (under==-1 && div==-1) {
  57. numer=Integer.parseInt(s);
  58. denom=1;
  59. }
  60. else if(under==-1) {
  61. numer=Integer.parseInt(s.substring(under+1,div));
  62. denom=Integer.parseInt(s.substring(div+1,s.length()));
  63. }
  64. else {
  65. denom=Integer.parseInt(s.substring(div+1,s.length()));
  66. if (s.charAt(0)!='-') {
  67. numer=Integer.parseInt(s.substring(0,under)) * denom + Integer.parseInt(s.substring(under+1,div));
  68. }
  69. else {
  70. numer=Integer.parseInt(s.substring(0,under)) * denom - Integer.parseInt(s.substring(under+1,div));
  71. }
  72. }
  73.  
  74. if (denom < 0) {
  75. throw new IllegalArgumentException("Your denominator can't be less than zero!");
  76. }
  77. else if (denom == 0) {
  78. throw new IllegalArgumentException("You can't divide by zero!");
  79. }
  80.  
  81. this.numerator=numer;
  82. this.denominator=denom;
  83.  
  84. }
  85. public Fraction add(Fraction f) { //addition
  86. int gcd=gcd(f.getNumerator(), f.getDenominator());
  87. int lcm=(this.denominator*f.getDenominator())/gcd;
  88.  
  89. int factor1 = lcm/this.denominator;
  90. int factor2 = lcm/f.getDenominator();
  91.  
  92. int numerator = this.numerator * factor1 + f.getNumerator() * factor2;
  93. int denominator = lcm;
  94.  
  95. gcd(numerator, denominator);
  96.  
  97. numerator /= gcd;
  98. denominator /=gcd;
  99.  
  100. return new Fraction(numerator,denominator);
  101. }
  102. public Fraction subtract(Fraction f) { //minus
  103. int gcd=gcd(f.getNumerator(), f.getDenominator());
  104. int lcm=(this.denominator*f.getDenominator())/gcd;
  105.  
  106. int factor1 = lcm/this.denominator;
  107. int factor2 = lcm/f.getDenominator();
  108.  
  109. int numerator = this.numerator * factor1 - f.getNumerator() * factor2;
  110. int denominator=lcm;
  111.  
  112. gcd(numerator, denominator);
  113.  
  114. numerator /= gcd;
  115. denominator /=gcd;
  116.  
  117. if (denominator<0) {
  118. numerator*=-1;
  119. denominator*=1;
  120. }
  121.  
  122. return new Fraction(numerator,denominator);
  123. }
  124. public Fraction multiply(Fraction f) {
  125. int numerator = this.numerator * f.getNumerator();
  126. int denominator = this.denominator * f.getDenominator();
  127.  
  128. int gcd = gcd(numerator,denominator);
  129.  
  130. numerator /= gcd;
  131. denominator /=gcd;
  132.  
  133. return new Fraction(numerator,denominator);
  134. }
  135. public Fraction divide(Fraction f) {
  136.  
  137. if (this.denominator == 0 || f.getDenominator() == 0) {
  138. throw new IllegalArgumentException("You can't divide by zero!");
  139. }
  140. int numerator = this.numerator * f.getDenominator();
  141. int denominator = this.denominator * f.getNumerator();
  142.  
  143. int gcd = gcd(numerator,denominator);
  144.  
  145. numerator /= gcd;
  146. denominator /=gcd;
  147.  
  148. return new Fraction(numerator,denominator);
  149. }
  150. public int getNumerator() {
  151. return numerator;
  152. }
  153. public int getDenominator() {
  154. return denominator;
  155. }
  156. public static int gcd(int a, int b) {
  157. a = Math.abs(a);
  158. b = Math.abs(b);
  159.  
  160. while (b!=0) {
  161. int temp=b;
  162. b=a%b;
  163. a=temp;
  164. }
  165. return Math.abs(a);
  166. }
  167. public static int getIndex(String a, char c) {
  168. for (int i=0;i<a.length();i++) {
  169. if (a.charAt(i)==c) {
  170. return i;
  171. }
  172. }
  173. return -1;
  174. }
  175. public String toString() {
  176. if (this.denominator == 1) {
  177. return Integer.toString(this.numerator);
  178. }
  179. else if (Math.abs(this.numerator) < this.denominator) {
  180. return this.numerator + "/" + this.denominator;
  181. }
  182. else {
  183. return this.numerator / this.denominator + "_" + Math.abs(this.numerator % this.denominator) + "/" + this.denominator;
  184. }
  185. }
  186. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement