构造函数未按预期打印

时间:2013-09-02 08:50:40

标签: java

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“我假设是打印它存储位置的引用?我理解如何使用构造函数我只是没有收到预期的输出。任何帮助将不胜感激...谢谢!

6 个答案:

答案 0 :(得分: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);
    }
}

答案 1 :(得分:2)

您必须在override课程中toString Fraction()函数。

As per docs of toString()

  

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

所以

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

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

简单的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();
  }

答案 2 :(得分:2)

您需要覆盖相同

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

  return stringToReturn.toString();
}

答案 3 :(得分: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()方法。

快乐编码:)

答案 4 :(得分: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的{​​{1}}方法以获得所需的输出。

输出:

Object

答案 5 :(得分:0)

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

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

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