重写对象类的equals和toString方法的Java die程序?
我在工作中学习Java,我们应该做的练习说明如下: 创建一个表示模具的类。创建滚动模具的方法(随机数从1到6) 还重写对象类提供的equals和toString方法重写对象类的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
从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的问题。