Advertisement
Guest User

Untitled

a guest
Nov 21st, 2019
96
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.65 KB | None | 0 0
  1. package rational;
  2.  
  3. import java.util.regex.*;
  4.  
  5. class RatNum {
  6.  
  7. // Variabler.
  8.  
  9. // Täljare.
  10. private int teljare;
  11. // Nämnare.
  12. private int nemnare;
  13.  
  14. // Constructors
  15. public RatNum() {
  16. sätt(0);
  17. }
  18.  
  19. public RatNum(int a) {
  20. sätt(a);
  21. }
  22.  
  23. public RatNum(int a, int b) {
  24. sätt(a, b);
  25. }
  26.  
  27. public RatNum(RatNum r) { // Kopieringskonstruktorn
  28. sätt(r);
  29. }
  30.  
  31. public RatNum(String text) {
  32. /* Om text innehåller en text som på ett korrekt sätt beskriver ett rat numb
  33. * ska det nya talet initieras, annars NumberFormatException.
  34. * Använd parse metoden och kopieringskonstruktorn
  35. */
  36. }
  37.  
  38.  
  39. public int getNumerator() {
  40. return teljare;
  41. }
  42.  
  43. public int getDenominator() {
  44. return nemnare;
  45. }
  46.  
  47.  
  48. public void sätt(int a, int b) {
  49.  
  50. if (b == 0) {
  51.  
  52. throw new NumberFormatException("Nämnare = 0");
  53.  
  54. }
  55.  
  56.  
  57. if (a == 0) {
  58.  
  59. teljare = 0;
  60.  
  61. nemnare = b;
  62. }
  63.  
  64. else {
  65.  
  66.  
  67.  
  68. int numerator, denominator;
  69.  
  70. denominator = Math.abs(b);
  71.  
  72.  
  73.  
  74. if (a > 0 && b > 0 || a < 0 && b < 0) {
  75. numerator = Math.abs(a);
  76. }
  77.  
  78. else {
  79. numerator = a < 0 ? a : a * -1;
  80. }
  81.  
  82.  
  83. int divisor = sgd(Math.abs(a), Math.abs(b));
  84.  
  85. if (divisor == 1) {
  86.  
  87. teljare = numerator;
  88.  
  89. nemnare = denominator;
  90. } else {
  91.  
  92. teljare = numerator / divisor;
  93.  
  94. nemnare = denominator / divisor;
  95. }
  96. }
  97.  
  98. }
  99.  
  100.  
  101. public void sätt(int a) {
  102.  
  103. teljare = a;
  104.  
  105. nemnare = 1;
  106. }
  107.  
  108.  
  109. public void sätt(RatNum r) {
  110.  
  111. this.teljare = r.getNumerator();
  112.  
  113. this.nemnare = r.getDenominator();
  114. }
  115.  
  116.  
  117. public static int sgd(int one, int two) {
  118.  
  119. int r, m, n;
  120.  
  121. m = Math.abs(one);
  122.  
  123. n = Math.abs(two);
  124.  
  125. if(m == 0 || n == 0)
  126. throw new IllegalArgumentException();
  127.  
  128. r = m % n;
  129.  
  130. if (r == 0) {
  131. return n;
  132. } else {
  133. return sgd(n, r);
  134. }
  135. }
  136.  
  137. public String toString() {
  138.  
  139. return (Integer.toString(teljare) + "/" + Integer.toString(nemnare));
  140.  
  141. }
  142.  
  143.  
  144. public static RatNum parse(String s) {
  145.  
  146. Pattern p = Pattern.compile("^(-?\\d+)(\\/(-?[1-9]{1}\\d*))?$");
  147.  
  148. Matcher m = p.matcher(s);
  149.  
  150. while (m.find()) {
  151.  
  152. int a, b = 1;
  153.  
  154. a = Integer.valueOf(m.group(1));
  155.  
  156. if (m.group(3) != null) {
  157.  
  158. b = Integer.valueOf(m.group(3));
  159. }
  160.  
  161. return new RatNum(a, b);
  162. }
  163.  
  164. return null;
  165. }
  166.  
  167. public Object clone() {
  168.  
  169. RatNum rat = new RatNum(this.getNumerator(), this.getDenominator());
  170.  
  171. return (Object) rat;
  172. }
  173.  
  174.  
  175. public boolean equals(RatNum r) {
  176.  
  177. return r.toString().equals(this.toString());
  178.  
  179. }
  180.  
  181. public boolean lessThan(RatNum r) {
  182.  
  183. int n1, n2;
  184.  
  185.  
  186. if (this.getDenominator() != r.getDenominator()) {
  187.  
  188. n1 = this.getNumerator() * r.getDenominator();
  189.  
  190. n2 = r.getNumerator() * this.getDenominator();
  191.  
  192. } else {
  193.  
  194. n1 = this.getNumerator();
  195.  
  196. n2 = r.getNumerator();
  197.  
  198. }
  199.  
  200. return n1 < n2;
  201.  
  202. }
  203.  
  204. public RatNum add(RatNum r) {
  205.  
  206. return new RatNum(this.getNumerator() * this.getDenominator() + r.getNumerator() * r.getDenominator(), r.getNumerator() * this.getDenominator());
  207. }
  208.  
  209. public RatNum sub(RatNum r) {
  210.  
  211. return new RatNum(this.getNumerator() * this.getDenominator() - r.getNumerator() * r.getDenominator(), r.getNumerator() * this.getDenominator());
  212. }
  213.  
  214. public RatNum mul(RatNum r) {
  215.  
  216.  
  217. return new RatNum(this.getNumerator() * r.getNumerator(), r.getDenominator() * this.getDenominator());
  218. }
  219.  
  220. public RatNum div(RatNum r) {
  221.  
  222. return new RatNum(this.getNumerator() * this.getDenominator(), r.getDenominator() * r.getNumerator());
  223. }
  224.  
  225. public double toDouble() {
  226. return (double) teljare / nemnare;
  227. }
  228.  
  229. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement