1

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

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

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

直接来自没有 Java 经验的 C++,我认为第一部分相对简单。但是,我不确定如何覆盖 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);
    }
}
4

6 回答 6

6

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

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

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

于 2012-07-02T18:19:07.987 回答
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;
  }
}
于 2012-07-02T18:25:38.927 回答
1

覆盖equals()告诉实际上使两个对象相等的原因。如果不覆盖equals(),则使用默认的 equals ==。重写toString()使程序员有机会定义打印对象时要打印的内容。如果toString()没有被覆盖,则使用默认值,它是一个字符串,由对象作为实例的类的名称、at-sign 字符@和对象的哈希码的无符号十六进制表示组成。

假设我有一个对象死了

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

}

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

于 2012-07-02T18:29:05.227 回答
1

这是一个不可变的 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;
     }
}
于 2012-07-02T18:33:35.303 回答
0

关于覆盖方法的 Java 教程将是一个很好的起点。

于 2012-07-02T18:16:39.017 回答
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;
     }


}  
于 2012-10-09T20:11:56.447 回答