Fraction类返回字符串而不是已解决的分数

时间:2017-04-09 18:41:00

标签: java

我得到了Java Fraction类的代码,用于确定输出并将文档归档为赋值。但是当我使用这个类来解决一个实际的分数时,它并没有给我实际的结果,只有随机的字符串。

输出:

C:\Users\Jack\Documents\assign>java testFrac
Fraction@3485097d + Fraction@a32087b - Fraction@5acac877 = Fraction@372f2b32

Fraction.java

public class Fraction {
  private int num;    // numerator 
  private int denom;  // denominator 
  public Fraction(int n, int d) {
    int g; 
    if (d == 0) { 
          System.out.println("Fraction: fraction "
      + "with 0 denominator?"); System.exit(1); 
    } 
    if (n == 0) {
      num = 0; 
      denom = 1; 
        } else {
      if (d < 0) {
        n = -n; 
        d = -d; 
      }
      if ((g = gcd(n, d)) != 1) { // remove gcd
        n /= g;
        d /= g;
      }
      num = n; 
      denom = d; 
    }
  } 
  private static int gcd(int a, int b) {
    a = Math.abs(a); 
    b = Math.abs(b); 
    if (a == 0) return b; // 0 is error value 
    if (b == 0) return a; 
    int t; 
    while (b > 0) {
      t = a % b; // take "-" to the extreme 
      a = b; 
      b = t; 
    }
    return a; 
  }
  public boolean isZero() {
    return (denom == 1 && num == 0); 
  } 
  public boolean isInt() {
    return (denom == 1); 
  }
 public boolean equals(Fraction y) {
    return (num == y.num && denom == y.denom); 
  }
  public boolean greaterThan(Fraction y) {
    return (num * y.denom > denom * y.num); 
  }
  public Fraction minus(Fraction y) {
    return new Fraction(
      num * y.denom - y.num * denom, 
      denom * y.denom
    ); 
  }  
  public Fraction plus(Fraction y) {
    return new Fraction(
      num * y.denom + y.num * denom, 
      denom * y.denom
    ); 
  }  
  public Fraction times(Fraction y) {
    return new Fraction(num * y.num, denom * y.denom); 
  }  
  public Fraction dividedBy(Fraction y) {
    return new Fraction(num * y.denom, denom * y.num); 
  }  
}

testFrac.java

class testFrac {
  public static void main(String[] args) {
    Fraction x = new Fraction( 1, 20); 
    Fraction u = new Fraction(1, 60); 
    Fraction v = new Fraction( 1, 30); 
    Fraction y; 
    y = x.plus(u).minus(v); // in one step!
    System.out.println( x + " + " + 
                        u + " - " + 
                        v + " = " + y); 
 }
}

请指导我在哪里弄错了!

5 个答案:

答案 0 :(得分:2)

如果您不覆盖toString(),默认情况下,当您打印对象时,您只会看到对象的哈希码值(例如您的Fraction@3485097d等... )。

所以你需要覆盖toString()方法(来自java.lang.Object),如下所示,这样当你使用Fraction类的对象时,它将打印字符串(如下所示)。

@Override
public String toString() {
    return "Fraction [num=" + num + ", denom=" + denom + "]";
}  

答案 1 :(得分:1)

请使用

之类的方式覆盖toString方法
@Override
public String toString(){
  return num + "/" + denom;
}

答案 2 :(得分:0)

您需要为toString课程定义Fraction方法;默认的是产生&#34;随机&#34;您看到的输出(根本不是随机的)。

答案 3 :(得分:0)

当您打印Fraction对象时,会调用toString()方法。您需要使用类似

的方法覆盖toString()方法
public String toString(){  
  return num+"/"+denom;  
 }  

答案 4 :(得分:0)

您正在打印Fraction对象本身。要打印它,您需要一个字符串表示分数。您可以覆盖toString方法并执行以下操作

@Override
public String toString() {
        return num + "/" + denom;
}

并打印时调用toString方法,如下所示

System.out.println( x.toString() + " + " + 
                        u.toString() + " - " + 
                        v.toString() + " = " + y.toString());