0

我正在使用实例作为参数在 Java 上为分数操作编写一些方法,但由于某种原因,当我尝试从另一个类打印结果时,它会打印出类似“(PackageName).(ClassName)@1497b7b1”的内容。这只发生在“Suma”、“Resta”、“División”、“Multiplicación”方法中。这是代码,以便您更好地理解:

package fracciones;

public class Fraction {

    private int Numerador;
    private int Denominador;

    public Fraction() {
        Numerador = 0;
        Denominador = 1;
    }

    public Fraction(int Num, int Den) {
        Numerador = Num;
        Denominador = Den;
    }

    public int getNumerador() {
        return Numerador;
    }

    public int getDenominador() {
        return Denominador;
    }

    public Fraction Suma(Fraction Suma) {
        int Num = Suma.getNumerador();
        int Den = Suma.getDenominador();

        Fraction c = new Fraction();

        c.Numerador = Numerador * Den + Denominador * Num;
        c.Denominador = Denominador * Den;
        return c;
    }

    public Fraction Resta(Fraction Resta) {
        int Num = Resta.getNumerador();
        int Den = Resta.getDenominador();

        Fraction c = new Fraction();

        c.Numerador = Numerador * Den - Num * Denominador;
        c.Denominador = Denominador * Den;
        return c;
    }

    public Fraction Multiplicación(Fraction Multiplicación) {
        int Num = Multiplicación.getNumerador();
        int Den = Multiplicación.getDenominador();

        Fraction c = new Fraction();

        c.Numerador = Numerador * Num;
        c.Denominador = Denominador * Den;
        return c;
    }

    public Fraction División(Fraction División) {
        int Num = División.getNumerador();
        int Den = División.getDenominador();

        Fraction c = new Fraction();

        c.Numerador = Numerador * Den;
        c.Denominador = Denominador * Num;
        return c;
    }

    public String ImpresiónFraction() {
        String Text = Numerador + "/" + Denominador;
        return Text;
    }

    public Float ImpresiónFloat() {
        Float Float = new Float(Numerador);
        Float Numero = Float.floatValue() / Denominador;
        return Numero;
    }

}

和这个用于打印的类:

package fracciones;

public class FraccionCalc {

    public static void main(String[] args) {
        Fraction Una = new Fraction(1, 2);
        Fraction Dos = new Fraction(8, 16);

        System.out.println(Una.Resta(Dos));

        System.out.println(Una.ImpresiónFloat());

    }

}
4

8 回答 8

6

如果你想打印一个对象,你需要在你的类中重写和定义toString()自己- 否则你只会打印对象哈希码。Fraction

例如,以下内容可能类似于您想要的内容:

@Override
public String toString() {
    return "Fraction [" + Numerador + "/" + Denominador + "]";
}
于 2013-04-04T09:17:37.327 回答
2

Fraction需要实现该toString()方法,因为它当前正在使用Object.toString()返回:

getClass().getName() + '@' + Integer.toHexString(hashCode())

示例实现:

class Fraction
{
    @Override public String toString()
    {
        return Numerador + "/" + Denominador;
    }
}
于 2013-04-04T09:18:21.720 回答
2

Fraction在类中添加此方法

    @Override
    public String toString() {
        return "Numerador: "+Numerador+", "+"Denominador: "+Denominador;
    }

PS:写变量名和方法名时使用camel case ,写类名时使用pascal case

于 2013-04-04T09:21:55.753 回答
1

您需要覆盖toString()类中的方法。System.out.println()使用它来获取对象的文本表示。

于 2013-04-04T09:19:15.733 回答
1

您正在打印出对对象的引用。如果要获取实际的整数值,则必须提供 getter 方法,或者将变量公开并通过 Una.Num 等直接打印出来……

于 2013-04-04T09:19:46.233 回答
1

尝试这样做

System.out.println(Una.Resta(Dos).getNumerador() + Una.Resta(Dos).getDenominador());
于 2013-04-04T09:20:30.760 回答
1

Una.Resta() => 返回 Fraction 类的对象。System.out.println => 需要一个字符串来打印。所以它必须通过调用 Object 类的 toString() 方法将对象转换为字符串。所以你必须在 Fraction 类中实现这个方法来格式化你想要打印的字符串。

于 2013-04-04T09:22:29.127 回答
0

您的方法返回类型 Fraction,这将需要实现 toString() 方法,该方法可用于控制对象的字符串表示。

或者,您可以将方法更改为具有字符串类型的返回值。

于 2013-04-04T09:19:36.223 回答