Java die程序覆盖Object类的equals和toString方法?

时间:2012-07-02 18:14:50

标签: java

我在工作中学习Java,我们应该做的练习如下:

  

创建一个代表骰子的类。创建一个滚动骰子的方法(随机数从1到6)

     

还覆盖Object类提供的equals和toString方法。

直接来自C ++而没有Java经验,我认为第一部分相对简单。但是,我不确定如何覆盖equals和toString方法?

到目前为止,这是我的代码,我们将非常感谢任何建议:

package this;

import java.lang.Object;
public class Die
{
    public static void main(String[] args) 
    {
    int die;
    die = (int)(Math.random()*6 + 1);
    System.out.println (die);
    }
}

6 个答案:

答案 0 :(得分:6)

Die实例应代表骰子。 Die类不应该是启动骰子的程序性应用程序。

Die具有状态,即当前面值(1到6)。滚动它应该使它从当前的面值变为另一个面值。

它的toString()方法可以说它是一个骰子,并说出它当前的面值。我没有真正看到重写equals()的重点,因为我不明白为什么一个骰子应该等于另一个骰子。但是如果它们具有相同的面值,你可以选择使两个模具相等。

答案 1 :(得分:1)

public class Die {
  int value;
  public Die() {
    roll;
  }

  public void roll() {
    value = (int)(Math.random()*5 + 1)
  }

  @Override
  public String toString() {
    return "The current value is: " + value;
  }
}

答案 2 :(得分:1)

覆盖equals()告诉实际使两个对象相等的原因。如果您不覆盖equals(),则使用使用==的默认等号。 覆盖toString()使程序员有机会定义打印对象时打印的内容。如果未覆盖toString(),则使用默认值,该字符串由对象为实例的类的名称,符号字符@和无符号十六进制表示形式组成。对象的哈希码。

假设我有一个对象Die

public class Die
{
    private Long id;

    private String face;

/**
 * @return the id
 */
public Long getId() {
    return id;
}

/**
 * @param id the id to set
 */
public void setId(Long id) {
    this.id = id;
}
/**
 * @return the face
 */
public String getFace()
{
    return face;
}

/**
 * @param face the face to set
 */
public void setFace(String face)
{
    this.face = face;
}
//Overriding toString
    /**
     * @see java.lang.Object#toString()
     */
    @Override
    public String toString()
    {
        return "The value of the Die Face is = " + getFace();
    }
    //Overriding equals
    @Override
    public boolean equals(final Object obj)
    {
        if (obj instanceof Die)
        {
            Die val = (Die) obj;
            return (val.getFace().equals(this.face));
        }
        return false;
    }

}

如果您有问题,请告诉我。

答案 3 :(得分:1)

这是一个不可变的模具。

public class Die {

    private int face;

    private Die(int face) {
       this.face = face;
    } 
    public static Die roll() {
       return new Die(Math.random(5) + 1);
    } 

    private int getFace() {
        return face;
    }

    public String toString() {
        return "Die:" + face;
    }

    public boolean equals(Object obj)   {
       if (obj instanceof Die) {
             return face == ((Die) obj).getFace();
       } else {
             return false;
       }
     }

     public int hashCode() {
         return die;
     }
}

答案 4 :(得分:0)

The Java tutorial on overriding methods将是一个很好的起点。

答案 5 :(得分:0)

package this;

import java.lang.Object;
public class Die
{
    public static void main(String[] args) 
    {
    int die;
    die = (int)(Math.random()*6 + 1);
    System.out.println (die);
    }
}

看起来应该更像这样:

package com.example;

//don't need to import anything in the java.lang package you get this for free  

public class Die  
{  
      private int value; //defaults to 0  

     public static void main(String[] args)  
     {  
         Die die = new Die();  
         die.roll();
         System.out.println(die.toString());
     }  

     public String toString()  
     {
         return "Value: " + value;  
     }
     public int getValue()  
     {
       return this.value;  
     }
     public void roll()  
     {  
        this.value=(int)(Math.random(5)+1);
     } 

public boolean equals(Object obj)   {
       if (obj instanceof Die) {
             return value== ((Die) obj).getValue();
       } else {
             return false;
       }
     }

     public int hashCode() {
         return die;
     }


}