2

これはじゃんけんゲームです。私の質問は、weapons.length をプライベート Random r = new Random(weapons.length); に移動した場合です。それは私にエラーを与えるでしょう。メソッド内でweapons.lengthを移動すると、正常に実行されます。違いはなんですか?

 public class Game {

private String[] weapons = {"rock", "paper", "scissor"};
private Random r = new Random(weapons.length);


public void thePick() {

    System.out.println(weapons[r.nextInt()]);

 }

}

public class Game {

private String[] weapons = {"rock", "paper", "scissor"};
private Random r = new Random();


public void thePick() {

    System.out.println(weapons[r.nextInt(weapons.length)]);

 }
}
4

5 に答える 5

0

それぞれの Javadocs を読むことを検討する必要があります: 最初の試行で呼び出すコンストラクタは次のとおりです: http://docs.oracle.com/javase/7/docs/api/java/util/Random.html#Random%28long% 29 実際には、指定された範囲で乱数を取得しないシードを提供しています。つまり、.nextInt() への呼び出しは、アプリケーションの実行ごとに同じものを返します。

2 回目の試行では、デフォルトのコンストラクター (現在の時刻をシードとして初期化) を使用し、正しいことを行うメソッドを呼び出しています: http://docs.oracle.com/javase/7/docs/api/java/util /Random.html#nextInt%28int%29

于 2013-10-08T16:57:28.233 に答える