重写对象类的equals和toString方法的Java die程序?

重写对象类的equals和toString方法的Java die程序?,java,Java,我在工作中学习Java,我们应该做的练习说明如下: 创建一个表示模具的类。创建滚动模具的方法(随机数从1到6) 还重写对象类提供的equals和toString方法 从C++中直接获得,没有java经验,我认为第一部分相对简单。但是,我不知道如何重写equals和toString方法 这是我迄今为止的代码,如有任何建议,将不胜感激: package this; import java.lang.Object; public class Die { public static void

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

创建一个表示模具的类。创建滚动模具的方法(随机数从1到6)

还重写对象类提供的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);
    }
}
将是一个很好的起点。

将是一个很好的起点。

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

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

它的
toString()
方法可以说它是一个骰子,并且可以说它当前的面值。我真的不明白重写equals()的意义,因为我不明白为什么一个骰子应该与另一个骰子相等。但是,如果两个模具具有相同的面值,您可以选择使它们相等。

模具实例应该表示一个模具。Die类不应是启动Die的过程应用程序

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;
  }
}
模具有一个状态,即其当前面值(1到6)。滚动它应该使它从当前的面值转到另一个面值

它的
toString()
方法可以说它是一个骰子,并且可以说它当前的面值。我真的不明白重写equals()的意义,因为我不明白为什么一个骰子应该与另一个骰子相等。但是,如果两个模具具有相同的面值,您可以选择使它们相等。

覆盖
equals()
说明了实际是什么使两个对象相等。如果不重写
equals()
,将使用使用
=
的默认equals。
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;
  }
}
重写
toString()
使程序员有机会定义打印对象时打印出的内容。如果未重写
toString()
,则使用默认值,该字符串由对象作为实例的类的名称、at符号字符
@
和对象哈希代码的无符号十六进制表示组成

假设我有一个目标死了

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;
    }

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

重写
equals()
告诉我们是什么使两个对象相等。如果不重写
equals()
,将使用使用
=
的默认equals。 重写
toString()
使程序员有机会定义打印对象时打印出的内容。如果未重写
toString()
,则使用默认值,该字符串由对象作为实例的类的名称、at符号字符
@
和对象哈希代码的无符号十六进制表示组成

假设我有一个目标死了

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;
    }

}

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

这是一个不可变的骰子

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;
     }
}

这是一个永恒的死亡

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;
     }
}
应该更像这样:

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;
     }


}  
应该更像这样:

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;
     }


}  

这不是一个表示骰子的类。这是一个试图模拟模具的类。random(5)+1是执行随机函数的正确方法,该函数不是代表模具的类。这是一个试图模拟骰子的类。random(5)+1是执行随机函数die.setFace(“OOP是关于封装”)的正确方法;我开始更好地理解这一点。java和C++是相似的,但它是我第一天用java工作,所以我觉得它超出了我的范围。因此,在此之后,我将添加“publicstaticvoidmain(stringargs[]),并调用一个方法来滚动骰子?是的。主方法将创建一个Die实例(
Die theDie=newdie()
),然后根据需要多次滚动Die。不要把上面的代码作为一个很好的例子:它没有封装模具的滚动,并且有一个没有任何用途的ID。顺便说一句,如果要重写equals()方法,最好也重写hashCode()方法。hashCode()方法是Java用来(除其他外)确定对象在放入映射或哈希表时应该放入哪个bucket的方法。当两个对象实例从equals()返回true时,如果不重写hashCode()以返回相同的值,则无法从哈希表可靠地检索回对象@大卫,你说得对。但答案是基于user1496816 question.die.setFace(“OOP是关于封装的”);我开始更好地理解这一点。java和C++是相似的,但它是我第一天用java工作,所以我觉得它超出了我的范围。因此,在此之后,我将添加“publicstaticvoidmain(stringargs[]),并调用一个方法来滚动骰子?是的。主方法将创建一个Die实例(
Die theDie=newdie()
),然后根据需要多次滚动Die。不要把上面的代码作为一个很好的例子:它没有封装模具的滚动,并且有一个没有任何用途的ID。顺便说一句,如果要重写equals()方法,最好也重写hashCode()方法。hashCode()方法是Java用来(除其他外)确定对象在放入映射或哈希表时应该放入哪个bucket的方法。当两个对象实例从equals()返回true时,如果不重写hashCode()以返回相同的值,则无法从哈希表可靠地检索回对象@大卫,你说得对。但答案是基于用户1496816的问题。