2015-11-18 6 views
-1

У меня есть рациональный класс и основной класс. Многие из моих кодов выполняются в рациональном классе, а затем я вызываю его в основном классе. Однако некоторые из соображений не печатаются, как реальные числа. Они выглядят так: [email protected] Я не могу понять, как правильно их напечатать. Кроме того, я не могу понять, как использовать метод сокращения после добавления рациональных методов в метод добавления. Последняя строка кода в основном классе содержит ошибку.Методы Java с использованием Rationals

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); 
} 
} 

Это мой основной класс.

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)); 
    } 
} 

ответ

0

Вам необходимо переопределить метод toString() в Rational.

например.

public String toString() { 
    return num + "/" + den; 
} 
+0

Как это сделать? –

+0

Добавлено определение – vsnyc

+0

Спасибо, это сработало! :) –

-1

Добавить этот метод в ваш Rational класс:

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

Реализация по умолчанию toString будет давать только имя класса и шестнадцатеричной строки его хэш-кода.