-1

I have a rational class and a main class. A lot of my code is done in the rational class and then I invoke it in the main class. However, a few of the rationals are not printing like real numbers. They look like this: rational.Rational@7852e922. I cannot figure out how to print them correctly. Also, I cannot figure out how to use my reduce method after I add the rationals in my add method. The last line of the code in the main class comes up with an error.

public class Rational {

/**
 * @param args the command line arguments
 */

double num;
double den;

public Rational() {
    this.num = 0.0;
    this.den = 0.0;
}

public static void printRational(Rational r) {
    System.out.println(r.num + " / " + r.den);
}

public Rational(double num, double den) {
    this.num = num;
    this.den = den;
}

public static void negate(Rational r) {
    r.num = -r.num;
}

public static double invert(Rational r) {
    return Math.pow(r.num / r.den, -1);
}

public double toDouble() {
    return (double) num / den;
}

public static int gcd(int n, int d) {
    if (n < 0) {
        n = -n;
    }
    if (d < 0) {
        d = -d;
    }
    return n * (d / gcd (n, d));
}

public Rational reduce() {
    double g = num;
    double gcd = den;
    double tmp;
    if (g < gcd) {
        tmp = g;
        g = gcd;
        gcd = tmp;
    }
    while (g != 0) {
        tmp = g;
        g = gcd % g;
        gcd = tmp;
    }
    return new Rational(num / gcd, den / gcd);
}

public static Rational add(Rational a, Rational b) {
    double den = a.den * b.den;
    double num = a.num * b.num;
    return new Rational(num, den);
}
}

This is my main class.

public class Main {

    public static void main(String[] args) {
        Rational x = new Rational();           
        x.num = 2.0;
        x.den = 3.0;
        System.out.println(x);
        System.out.println();

        Rational.negate(x);
        System.out.println(x);
        System.out.println();

        Rational y = new Rational(2.0, 3.0);
        System.out.println(Rational.invert(y));
        System.out.println();

        System.out.println(y.toDouble());
        System.out.println();

        Rational z = new Rational();
        Rational w = new Rational();
        z.num = 5.0;
        z.den = 3.0;
        w.num = 4.0;
        w.den = 3.0;
        Rational.add(z, w);
        System.out.println(Rational.add(z, w));
        System.out.println(Rational.reduce(z,w));
    }
}
Unheilig
  • 16,196
  • 193
  • 68
  • 98
Sikki Nixx
  • 49
  • 3

2 Answers2

0

You need to override the toString() method in Rational.

e.g.

public String toString() {
    return num + " / " + den;
}
vsnyc
  • 2,117
  • 22
  • 35
-1

Add this method to your Rational class:

@Override
public String toString() {
    return printRational(this);
}

The default implementation of toString will only give the class name and the hex string of its hash code.

Jan Dörrenhaus
  • 6,581
  • 2
  • 34
  • 45