我在工作中学习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);
}
}
答案 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;
}
}