2

Javaについていくつか質問があります。コードには2つの質問があります(コメントとして残しました)。また、メソッドの設定と取得を使用する目的は何ですか?簡単に説明していただけますか。私は初心者です。ありがとうございました :)

public class Die
{
   private final int MAX = 6;  
   private int faceValue;  

   public Die()
   {
      faceValue = 1;

      //why do you set the faceValue as 1?
   }

   public int roll()
   {
      faceValue = (int)(Math.random() * MAX) + 1;
      //Why do we use MAX instead of just number 6?

      return faceValue;
   }

   public void setFaceValue (int value)
   {
      if (value > 0 && value <= MAX)
         faceValue = value;
   }

   public int getFaceValue()
   {
      return faceValue;
   }

   public String toString()
   {
      String result = Integer.toString(faceValue);
      return result;
   }
}
4

8 に答える 8

3

まず、コードサンプルタグを適切に使用する必要があります。これは、そのように読むのは醜いです。getter / setterメソッドを使用すると、インスタンス変数に直接アクセスできなくなります。これは、データの非表示またはカプセル化とも呼ばれます。質問に関しては、faceValueは値1で初期化されます。通常、コンストラクター内で初期化を行います。2番目の質問Math.randomは、0から1までの数値を生成し、6を掛けると、0から5までの数値になります。したがって、+1を加算して1から6の範囲にします。

于 2010-10-19T18:58:52.077 に答える
2

定数(「MAX」)を使用するのは、たとえば20面のサイコロを振る場合など、値を変更したい場合があるためです。その場合、コードを1行で変更するだけで、保守が容易になります。この単純な種類のプログラムではそれほど意味がありませんが、より複雑なプロジェクトでは、定数を使用して、すべての行をチェックせずに特定の(固定)値をすばやく変更する必要があります。

GetterメソッドとSetterメソッドは、オブジェクト指向プログラミングで使用され、変数をカプセル化して保持し、他のクラスがそれらの変数にアクセスできるようにするためのインターフェイスを提供します。

于 2010-10-19T18:58:39.877 に答える
2

Q:なぜゲッターとセッターを使用するのですか?

A:プライベートインスタンス変数と組み合わせて使用​​すると、フィールドの値をどのように変更するかを正確に定義できます。ほとんどの場合、ゲッターとセッターはチェックや副作用なしに値を取得/設定するだけなので、面倒になる可能性があります。しかし、ここのコードでも、faceValueのセッターが指定された値が0からMAXの間にあるかどうかを確認する方法を確認できます。これにより、自分自身を含む誰かがfaceValueを変更したい場合に、入力がチェックされます。

これはカプセル化と呼ばれ、クラスのフィールドをそのクラスの外部のすべてから非表示にし、それらのフィールドの取得と操作を変更する方法について非常に具体的な方法を定義します。

Q:faceValueを1に設定するのはなぜですか?

A:これはfaceValueを1に初期化するだけです。したがって、最初にサイコロを振らずにgetValueを呼び出すと、常に1が返されます。これは任意の値にすることができます。

Q:なぜMAXを使用するのですか?

A:コード内の定数に定数を使用することは非常に良いプログラミング手法です。

まず第一に、それはコードを読みやすくします。私があなたのコードを読んでいて、私が見たとしたらvalue <= 6、私は6が実際に何であるかについて混乱するでしょう。DICE_MAX_VALUEのようなものを見た場合、あなたが何をチェックしていたかを正確に知っています。

第二に、おそらくもっと重要なことに、定数を使用すると、定数を一度定義してどこでも使用でき、同じ値を持つことが保証されます。これを20面のサイコロに変更したい場合は、コードを調べて「6」のすべてのインスタンスを「20」に変更する必要があります。これは、煩わしく、時間がかかり、エラーが発生しやすくなります。

于 2010-10-19T19:05:21.437 に答える
1

設定faceValueとは、への呼び出しに依存せずに、初期化時に適切なダイスロールを割り当てることroll()です。6の代わりに使用MAXすると、ダイサイズの変更が簡単になります。たとえば、他の多くのゲームでは異なるダイサイズが使用されており、このコードをそれらに移植したい場合があります。

補足として、質問コードのフォーマットは、読みやすさを向上させるために少しの作業を使用する可能性があります。

于 2010-10-19T18:57:45.370 に答える
1
//why do you set the faceValue as 1?

Javaでは、整数はデフォルトで0に設定されていますが、サイコロでは0の値を持つ面はありません。

//Why do we use MAX instead of just number 6?

MAXが使用されるため、MAXの値を更新するときはいつでも、1か所で更新できます。そして、それはあなたがそれを使用したところならどこでも更新されます。このようにして、変更の保守と対応が容易になります。

于 2010-10-19T18:57:56.403 に答える
1

つまり、これをDataクラスと呼びます。これは、このクラスが、プログラムの周囲に送信されるデータ(この場合はダイのデータ)を表すために使用されることを意味します。ゲッター/セッターを正しく実行すると、このデータにアクセスして値を変更できます。このようなデータクラスを作成すると、複数を作成するときに便利です。したがって、メインクラス内でこれらの変数を宣言しただけの場合は、非常に困難で扱いにくいでしょう。ダイの複数のインスタンスを作成できますが、この方法で複数のダイを作成しました。額面値が1である限り、これは実際のダイの値が0になることはないため、ロール前のデフォルト値は1に設定されているためだと思います。それらはすべて同様の確率を持っているので、それは実際には任意の値である可能性があります。maxを使用するのは、常に6になるため、他の方法で誤って変更することができないためです。

于 2010-10-19T19:00:30.963 に答える
1

単に

// faceValueを1に設定するのはなぜですか?

デフォルト値セットは0になるため、ロジックでは望ましくないため、1に設定します。

// 6番だけでなくMAXを使用するのはなぜですか?

publicstaticfinalフィールドとして定数値を使用することを常にお勧めします

于 2010-10-19T19:02:34.060 に答える
1

この例は、私が大学で使用した教科書から直接引用したものです。あなたはライアソンのITMプログラムに参加していますか?

物理的なダイスは1から6の間で何でもロールすることを覚えておいてください。次のことを考慮してください。

public class Monopoly
{
  public static void main(String[] args)
  {
     Die myDie = new Die();
     System.out.println(myDie.getFaceValue());
  }
}

コンストラクターがfacevalueを初期化しなかった場合、どうなると思いますか?

6の代わりにMAXを使用することは、コードの可読性と関係があります。大きなプログラムでは、どこにでも6つ置くことができます。あなたが書いたのであなたにとっては問題ありませんが、2年後にあなたに取って代わるようになる開発者はどこでもこれらの6を見て、あなたが数字6を使用した理由を理解できないかもしれません。何が起こっているかにコンテキストを追加しています。次に、ゲームのルールが1〜8のダイを使用するように変更された場合、どこでも6秒から8秒に変更するのではなく、1つのエリアでMAX=8を更新する方が簡単です。

于 2010-10-19T19:23:25.730 に答える