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 クラスは、ダイを起動する手続き型アプリケーションであってはなりません。

ダイスには、現在の額面値 (1 ~ 6) である状態があります。それを転がすと、現在の額面から別の額面に変わるはずです。

そのtoString()方法は、それがサイコロであると言うことができ、現在の額面を言うことができます。equals() をオーバーライドする意味がよくわかりません。なぜなら、あるサイコロが別のサイコロと等しくなければならない理由がわからないからです。ただし、額面が同じ場合、2 つのサイコロを等しくすることを選択できます。

于 2012-07-02T18:19:07.987 に答える
1

オーバーライドequals()は、実際に2つのオブジェクトを等しくするものを示します。オーバーライドしない場合equals()は、デフォルトのequalsが使用==されます。オーバーライドtoString()により、プログラマーはオブジェクトが印刷されるときに何が印刷されるかを定義する機会が得られます。がオーバーライドされない場合は、デフォルトが使用されます。これは、オブジェクトがインスタンスであるクラスの名前、アットマーク文字、およびオブジェクトのハッシュコードの符号なし16進表現で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;
    }

}

問題がある場合はお知らせください。

于 2012-07-02T18:29:05.227 に答える
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 に答える
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 に答える
0

メソッドのオーバーライドに関する Java チュートリアルは、開始するのに適した場所です。

于 2012-07-02T18:16:39.017 に答える