2012-07-02 69 views
1

我学习Java的工作,我们应该做运动规定如下:覆盖Object类的equals和toString方法的Java die程序?

创建代表模具的类。创建滚动模的方法(从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); 
    } 
} 
+2

这是不是代表一个芯片的类。这是一个试图模拟死亡的类。 –

+0

random(5)+ 1是做随机函数的正确方法 –

回答

6

A模实例应该代表模具。 Die类不应该是启动死亡的程序性应用程序。

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

toString()方法可以说它是一个死亡,并说它的当前面值。我不认为重写equals()是重点,因为我不明白为什么死亡应该与其他死亡相等。但是如果它们具有相同的面值,则可以选择使两个模具相等。

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

重写equals()告诉什么是真正提出了两个对象相等。如果您不覆盖equals(),则默认等于使用==。 覆盖toString()为程序员提供了定义打印对象时打印的内容的机会。如果toString()未被覆盖,则使用默认值,该字符串是由对象为实例的类的名称,符号字符@和对象的哈希码的无符号十六进制表示形成的字符串。

让说我有一个对象模具

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

} 

让我知道,如果你有问题。

+0

die.setFace(“OOP is about encapsulation”); –

+0

我开始更好地理解这一点。 Java和C++是相似的,但它实际上是我第一次使用Java,所以我觉得它超出了我的范围。所以,在此之后,我会添加“公共静态无效的主要(字符串参数[])”,并调用一个方法来掷骰子? – TimeBomb006

+0

是的。主要方法是创建Die('Die theDie = new Die()')的实例,然后多次掷骰子。不使用上述代码作为一个很好的例子:它doean't封装的管芯的滚动,并具有不用于任何目的的ID。 –

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


}