3
public class Fraction
{
    public Franction(int n, int d)
    {
        int num = n;
        int denom = d;
    }

    public static void main(String[] args)
    {
        Fraction f1 = new Fraction(5,10);
        System.out.println("Fraction = " + f1);
    }
}

您好,我正在尝试学习 Java ...我正在编写的这本书建议上面代码的输出应该打印“Fraction = 5/10”,但是当我尝试它时,我只会收到“Fraction = Fraction” @33469a69" 我假设正在打印对其存储位置的引用?我理解它是如何与构造函数一起工作的,我只是没有收到预期的输出。任何帮助将不胜感激......谢谢!

4

6 回答 6

6

要获得所需的输出,您需要toString()在类中重载方法Franction。此方法用于确定对象的文本表示。默认情况下,它是ClassName@hashCode.

此外,您可能希望将在构造函数中收到的值存储为字段。现在,您将分子和分母存储在构造函数的局部变量中,一旦构造函数退出,这些变量就会被销毁。

尝试这样的事情:

public class Fraction
{
    private final int num
    private final int denom;

    public Franction(int n, int d)
    {
        this.num = n;
        this.denom = d;
    }

    @Override
    String toString() 
    {
        return String.format("%d/%d", num, denom);
    }

    public static void main(String[] args)
    {
        Fraction f1 = new Fraction(5,10);
        System.out.println("Fraction = " + f1);
    }
}
于 2013-09-02T08:52:02.497 回答
2

你必须在你的类中override使用toString() 函数。Fraction

根据 toString() 的文档

返回对象的字符串表示形式。通常,toString 方法返回一个“以文本方式表示”该对象的字符串。

所以

  Fraction@33469a69  is the textual representation of Fraction class.

要获得所需的输出,请toString在 Object 类的重写方法中编写逻辑并在那里返回字符串。

一个简单的toString实现看起来像

  @Override
  public String toString() {
    StringBuilder result = new StringBuilder();
    result.append(this.someMemeber); //will be in String format
    result.append(this.someMemeber);
    return result.toString();
  }
于 2013-09-02T08:51:51.033 回答
2

您需要覆盖toString相同的方法

public String toString(){
  StringBuilder stringToReturn = new StringBuilder();
  stringToReturn.append(this.num);
  stringToReturn.append("/");
  stringToReturn.append(this.denom);

  return stringToReturn.toString();
}
于 2013-09-02T08:52:26.830 回答
1

尝试以下操作:

public class Fraction {

    private final int num;
    private final int denom;

    public Fraction(int num, int denom) {
        this.num = num;
        this.denom = denom;
    }

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

    public static void main(String[] args) {
        Fraction f1 = new Fraction(5, 10);
        System.out.println("Fraction = " + f1);
    }
}

您必须将值存储在您创建的对象中。然后覆盖toString方法Object以获得所需的输出。

输出:

Fraction = 5/10
于 2013-09-02T09:04:38.160 回答
1

尝试这个

public class Fraction
{
    private int num;
    private int denom;
    public Franction(int n, int d)
    {
        num = n;
         denom = d;
    }

    public int getNum()
    {
        return num;
    }

    public int getDenom()
    {
        return denom;
    }


    public static void main(String[] args)
    {
        Fraction f1 = new Fraction(5,10);
        System.out.println("Fraction = " + f1.getNum() + "/" + f1.getDenom());
    }
}

替代方案(更好的方法)

public class Fraction
{
    private int num;
    private int denom;
    public Franction(int n, int d)
    {
        num = n;
         denom = d;
    }

    public int getNum()
    {
        return num;
    }

    public int getDenom()
    {
        return denom;
    }


    @Override
    public String toString(){
       return (f1.getNum() + "/" + f1.getDenom());
    }
    public static void main(String[] args)
    {
        Fraction f1 = new Fraction(5,10);
        System.out.println("Fraction = " + f1 );
    }
}

你需要学习更多关于封装、Object 类和 toString() 方法的知识。

快乐编码:)

于 2013-09-02T08:58:15.973 回答
0

您所做的就是打印出对象。

如果你想打印 Object 的内容,你将在你的类中创建一个 toString 方法。

http://www.javapractices.com/topic/TopicAction.do?Id=55

于 2013-09-02T08:52:37.427 回答