No.5ベストアンサー
- 回答日時:
なぜ、1.5だと挙動が違うのか、わかりました。
1.5の Randamクラスのソースを見てみると、コンストラクタは、
public Random() {
this(++seedUniquifier + System.nanoTime());
}
こうなっていました。
この System.nanoTime() メソッドは1.5から導入された物だそうで、ナノ秒単位の計測に使われるようです。
seedUniquifier は、long型の staticな変数で、これに1を足すことで、万が一、1ナノ秒の間に複数の Randamクラスが new されても、絶対に Seed がかぶらないように工夫されているみたいです。
たぶん、見てはないのですが、1.4では System.currentTimeMillis() あたりだけを使っているのかもしれませんね。
1.5で開発して、ちゃんと動くので安心していたら、いざ1.4で動かしてみたら、ダメだったなんて事にもなりかねませんねぇ。
バージョンに違いって怖いです。
No.4
- 回答日時:
こんばんは。
ソースをコンパイルして実行してみましたが、私の環境では、ちゃんとバラバラになりました。
ちなみにAgent数、Step数ともに3にしています。
step : 0
agentID : 0 action : 0
agentID : 1 action : 2
agentID : 2 action : 0
step : 1
agentID : 0 action : 2
agentID : 1 action : 1
agentID : 2 action : 2
step : 2
agentID : 0 action : 1
agentID : 1 action : 1
agentID : 2 action : 0
私の環境は Windows XP、JDK 1.5 です。
どんな環境で実行しましたか?
この回答への補足
返答ありがとうございます。
私の環境は、Windows XP,j2sdk1.4.2だと思います。
eclipse2.1.1を使っています。
どうやら乱数発生時のシードの問題だったようですが、環境によって違うものなのでしょうか。
No.3
- 回答日時:
new Random();
を
new Random((new Date()).getTime());
とかすればいいのでは
回答ありがとうございます。
public CAgent() {
m_rn = new Random((new Date()).getTime());
try {
Thread.sleep(1);
} catch (InterruptedException e) {
}
}
というコンストラクタを加えたら解決しました!
No.2
- 回答日時:
このプログラムは、エージェントをNUM_AGENT個作り、それぞれのエージェントに初期値を与えます。
ステップごとにそれぞれのエージェントは行動をランダムに選択(setActionメソッド)し、値を更新(takeActionメソッド)するというものです。しかし、このプログラムを実行結果は、step : 1
agentID : 0action : 1
agentID : 1action : 1
(省略)
agentID : 99action : 1
step : 2
agentID : 0action : 0
agentID : 1action : 0
(省略)
agentID : 99action : 0
ステップ単位ではランダムに選択されるのですが、それぞれのステップではすべてのエージェントが同じ行動になってしまっています。
自分では原因が分からないので、どなたか教えてください。それぞれのステップでエージェントが違った行動をとるには、どうすればいいのでしょうか…?
長文すみませんでした…
No.1
- 回答日時:
エージェントクラス
public class CAgent {
private Random m_rn = new Random();
private int m_rand;
private int m_change;
public int m_value;
private int m_action;
public void setAgentState(int num) {
m_value = 100 * num;
m_change = 0;
}
public void setAction(int i) {
m_rand = m_rn.nextInt(3);
m_action = m_rand;
System.out.println("agentID : " + i + "\t" + "action : " + m_action);
switch(m_rand) {
case 0 : m_change = 0; break;
case 1 : m_change = 1; break;
case 2 : m_change = -1; break;
}
}
public void takeAction() {
m_value += m_change;
}
}
mainクラス
public class Test2 {
private static final int NUM_AGENT = 100;
private static final int NUM_STEP = 10;
public static void main(String[] args) {
CAgent[] agent = new CAgent[NUM_AGENT];
for(int i=0;i<NUM_AGENT;i++) {
agent[i] = new CAgent();
agent[i].setAgentState(i+1);
}
for(int step=0;step<NUM_STEP;step++) {
System.out.println("step : " + step);
for(int j=0;j<NUM_AGENT;j++) {
agent[j].setAction(j);
agent[j].takeAction();
}
}
}
}
→回答No.2へ
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 物理学 Scratchの簡単なプログラム 2 2023/04/09 08:31
- Visual Basic(VBA) VBAのエラーについて 2 2023/08/02 17:46
- 転職 退職代行を使って前職を辞めました。 理由はパワハラが酷く、また休みの日にも連絡がたくさん来ることによ 4 2022/08/04 17:58
- デスクトップパソコン 「自動修復でPCを修復できませんでした」と表示されPCが起動しないのですが対処法はありますか? 5 2022/05/13 09:16
- その他(趣味・アウトドア・車) Arudino nanoが正常に動作しない原因 1 2022/10/30 18:29
- 面接・履歴書・職務経歴書 内定をもらった会社になんて伝えればいいでしょうか? 7 2022/08/03 00:46
- 転職 現在、転職エージェントさんを頼って転職活動を行っているんですが、私自身まだ、現在の会社に在職中で9月 3 2022/07/26 15:51
- その他(パソコン・スマホ・電化製品) PCに詳しい方に、質問です。 使用しているのは、TOSHIBAのPCで、多分なんですけど、アップデー 4 2023/01/28 03:30
- Visual Basic(VBA) Excel VBA 大量のレコードからある列の重複数をカウントする方法?拡張編 7 2022/08/22 13:43
- システム CPUの問題について 2 2022/07/09 12:04
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・プリン+醤油=ウニみたいな組み合わせメニューを教えて!
- ・タイムマシーンがあったら、過去と未来どちらに行く?
- ・遅刻の「言い訳」選手権
- ・【大喜利】【投稿~11/12】 急に朝起こしてきた母親に言われた一言とは?
- ・好きな和訳タイトルを教えてください
- ・うちのカレーにはこれが入ってる!って食材ありますか?
- ・好きな「お肉」は?
- ・あなたは何にトキメキますか?
- ・おすすめのモーニング・朝食メニューを教えて!
- ・「覚え間違い」を教えてください!
- ・とっておきの手土産を教えて
- ・「平成」を感じるもの
- ・秘密基地、どこに作った?
- ・【お題】NEW演歌
- ・カンパ〜イ!←最初の1杯目、なに頼む?
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・ハマっている「お菓子」を教えて!
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
変数を動的に利用するには?
-
System.exit()の値を取得したい
-
中カッコ{}だけの記述について
-
NoSuchMethodErrorが解決できま...
-
java 素数判定について
-
Java プログラム public class ...
-
繰り返し
-
Javaでlog4jを使ってログ出力を...
-
randomで
-
Javaでデータベースの内容をGUI...
-
Java初心者です
-
プログラミングの問題です。大...
-
java iを1づつ増やすプログラ...
-
日本語が文字コードによっては...
-
C言語のポインターに関する警告
-
IF関数でEmpty値を設定する方法。
-
オブジェクトの中のプロパティ...
-
Java 入力した整数値の合計を、...
-
ORA-01858: 数値を指定する箇所...
-
実数からの小数部の取得
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
変数を動的に利用するには?
-
プログラミングの問題です。大...
-
中カッコ{}だけの記述について
-
System.exit()の値を取得したい
-
randomで
-
Javaでlog4jを使ってログ出力を...
-
ArrayList でスタックを
-
NoSuchMethodErrorが解決できま...
-
元旦からの経過日数を求めたい
-
javaのプログラミングで作るRPG...
-
JSP/Servletのパラメータの受け...
-
インタフェイス実装と抽象クラ...
-
コンストラクタの引数の中のnew?
-
日本語が文字コードによっては...
-
初心者なので教えてほしいです。
-
GetterとSetterをやったのに。
-
JAVAで「Yahoo Japan!」に接続
-
Listデータを重復せずにSetに格...
-
日付の比較をしたいのですが・...
-
Socketの接続のタイムアウトを...
おすすめ情報