Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package rational;
- import java.util.regex.*;
- class RatNum {
- // Variabler.
- // Täljare.
- private int teljare;
- // Nämnare.
- private int nemnare;
- // Constructors
- public RatNum() {
- sätt(0);
- }
- public RatNum(int a) {
- sätt(a);
- }
- public RatNum(int a, int b) {
- sätt(a, b);
- }
- public RatNum(RatNum r) { // Kopieringskonstruktorn
- sätt(r);
- }
- public RatNum(String text) {
- /* Om text innehåller en text som på ett korrekt sätt beskriver ett rat numb
- * ska det nya talet initieras, annars NumberFormatException.
- * Använd parse metoden och kopieringskonstruktorn
- */
- }
- public int getNumerator() {
- return teljare;
- }
- public int getDenominator() {
- return nemnare;
- }
- public void sätt(int a, int b) {
- if (b == 0) {
- throw new NumberFormatException("Nämnare = 0");
- }
- if (a == 0) {
- teljare = 0;
- nemnare = b;
- }
- else {
- int numerator, denominator;
- denominator = Math.abs(b);
- if (a > 0 && b > 0 || a < 0 && b < 0) {
- numerator = Math.abs(a);
- }
- else {
- numerator = a < 0 ? a : a * -1;
- }
- int divisor = sgd(Math.abs(a), Math.abs(b));
- if (divisor == 1) {
- teljare = numerator;
- nemnare = denominator;
- } else {
- teljare = numerator / divisor;
- nemnare = denominator / divisor;
- }
- }
- }
- public void sätt(int a) {
- teljare = a;
- nemnare = 1;
- }
- public void sätt(RatNum r) {
- this.teljare = r.getNumerator();
- this.nemnare = r.getDenominator();
- }
- public static int sgd(int one, int two) {
- int r, m, n;
- m = Math.abs(one);
- n = Math.abs(two);
- if(m == 0 || n == 0)
- throw new IllegalArgumentException();
- r = m % n;
- if (r == 0) {
- return n;
- } else {
- return sgd(n, r);
- }
- }
- public String toString() {
- return (Integer.toString(teljare) + "/" + Integer.toString(nemnare));
- }
- public static RatNum parse(String s) {
- Pattern p = Pattern.compile("^(-?\\d+)(\\/(-?[1-9]{1}\\d*))?$");
- Matcher m = p.matcher(s);
- while (m.find()) {
- int a, b = 1;
- a = Integer.valueOf(m.group(1));
- if (m.group(3) != null) {
- b = Integer.valueOf(m.group(3));
- }
- return new RatNum(a, b);
- }
- return null;
- }
- public Object clone() {
- RatNum rat = new RatNum(this.getNumerator(), this.getDenominator());
- return (Object) rat;
- }
- public boolean equals(RatNum r) {
- return r.toString().equals(this.toString());
- }
- public boolean lessThan(RatNum r) {
- int n1, n2;
- if (this.getDenominator() != r.getDenominator()) {
- n1 = this.getNumerator() * r.getDenominator();
- n2 = r.getNumerator() * this.getDenominator();
- } else {
- n1 = this.getNumerator();
- n2 = r.getNumerator();
- }
- return n1 < n2;
- }
- public RatNum add(RatNum r) {
- return new RatNum(this.getNumerator() * this.getDenominator() + r.getNumerator() * r.getDenominator(), r.getNumerator() * this.getDenominator());
- }
- public RatNum sub(RatNum r) {
- return new RatNum(this.getNumerator() * this.getDenominator() - r.getNumerator() * r.getDenominator(), r.getNumerator() * this.getDenominator());
- }
- public RatNum mul(RatNum r) {
- return new RatNum(this.getNumerator() * r.getNumerator(), r.getDenominator() * this.getDenominator());
- }
- public RatNum div(RatNum r) {
- return new RatNum(this.getNumerator() * this.getDenominator(), r.getDenominator() * r.getNumerator());
- }
- public double toDouble() {
- return (double) teljare / nemnare;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement