我得到了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);
}
}
请指导我在哪里弄错了!
答案 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()
方法。您需要使用类似
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());