2016-10-19 8 views
0

ここに事があります。最近私はAIのようなものであるプロジェクトに取り組んできました。私がしたいことは、0〜300の間の乱数が与えられ、その数に基づいてランダムなことをしなければならないということです。Javaをランダムなものにする良い方法は?

今私は、例を切り替える私はIF-ELSE例を試してみましたし、明らかに彼らはさらに非効率的である

switch(/*number b/w 0-300*/){ 
case 0: 
case 1: 
so on to 300 

を使用することができます。

しかし、私はこれを行うにはより良い方法が必要であると思います。なぜなら、多くの場合、いつもそうするようになるからです。

EDIT:これらのケースはすべてVOIDなので、リストで実装する方法はわかりません。

interface AIAction { 
    public void execute(); 
} 

し、すべてのそれらのアクションの実装を収集:と私はそうインタフェースが

+0

300のランダムイベントがありますか?またはランダムなイベントの選択された数だけ? – b85411

+0

「ケース」で起こっている平均的なことは何ですか? – Mshnik

+0

私は分かりません。ここでは、プログラマー時間(300ケースの作成、テスト、および保守に要する労力)、または実行時間(マシンがコードを実行するのにかかる時間)について懸念していますか?後者の場合は、心配しないでください。 300件は何もありません。前者の場合、より多くの情報が必要です。難しい部分は、コード*をそれぞれのケースの中に書くことになります。それを自動化できると思うものがありますか? – ruakh

答えて

0

のもののリストを作成しますから選択する

List<Choice> choices = new List<Choice>(); 
choices.add(something); 
choices.add(somethingElse); 
... 
Choice random = choices.get(new Random().nextInt(choices.size())); 
+0

実際にこれを追加するにはどうすればいいですか?私はすべて私のメソッドが空であることを意味し、私はこのリストにメソッドを追加するたびにオブジェクトを作る必要があるようです。 – thvardhan

+0

私はリストにvoidメソッドを追加できませんし、私はvoidリストを作ることもできません。 – thvardhan

+0

私はそれを修正しました.. list.get()関数を呼び出すことを完全に忘れてしまったxD – thvardhan

0

を管理するために、ちょっと難しいですあなたはすべて「ランダムなもの」のためのインタフェースを定義できるJava 8へのJava 7カントの変更でいます配列内にあります。私は、ラムダを使用して各AIActionを実装することを選んだが、それはあなた次第、最終的です:その後

static AIAction[] actions = new AIAction[] { 
    () -> {System.out.println("a");}, 
    () -> {System.out.println("b");}, 
    () -> {System.out.println("c");} 
}; 

、あなただけのこのようなランダムなアクションを実行することができます

Random rand = new Random(); 
int index = rand.nextInt(actions.length); 
actions[index].execute(); 
関連する問題