2012-04-01 10 views
1

選択方法繰り返しできない1つの画像はありますか?色のランダムシーケンス

私はこれを試してみました:

私は、ランダムな使用と私はそれぞれの選択後に、そこから選択した画像を削除し、その後、配列の代わりにListまたはSetを使用して、選択した画像に

String[] picture = { "blue", "white", "red", "yellow" }; 

    int number_picture1; 

// Random function to find a random picture 

    Random ran = new Random(); 

    number_picture1 = ran.nextInt(picture.length); 

System.out.println(picture[number_picture1]); 

// There is still posibility to chose the same picture 

    int number_picture2; 

    number_picture2 = ran.nextInt(picture.length); 

System.out.println(picture[number_picture2]); 

答えて

6

あなたの要素を格納し、それにCollections.shuffle()を使用して、要素を繰り返し受け取ります。

シャッフルではリストのランダムな並べ替えが行われるため、アイテムを繰り返し選択すると同じ順序で並べ替える確率が高くなります。

コードスナップ:

String[] picture = { "blue", "white", "red", "yellow" }; 
//get a list out of your array: 
List<String> picturesList = Arrays.asList(picture); 
//shuffle the list: 
Collections.shuffle(picturesList); 
//first picture is the first element in list: 
String pictureOne = picturesList.get(0); 
System.out.println(pictureOne); 
//2nd picture is the 2nd element in list: 
String pictureTwo = picturesList.get(1); 
System.out.println(pictureTwo); 
... 

配列からリストを取得する(1)最も簡単な方法は、Arrays.asList()

+0

エラーが発生しました。//型java.awt.Listはパラメータをとりません。 –

+3

@LukaToni 'java.awt.List'を使用しないでください。[' java.util.List']を使用する必要があります(http://docs.oracle.com/javase/6/docs/api/java/util /List.html)。このインターフェイスのドキュメントを参照してください。 – amit

2

を削除します:最も簡単な方法は、List を使用することである

import java.util.List; 
import java.util.Arrays; 

List<String> pictures = Arrays.asList("blue","white","red","yellow"); 
int number_picture1; 

number_picture1=ran.nextInt(pictures.size()); 
System.out.println (pictures.remove(number_picture1)); 

int number_picture2; 

number_picture2=ran.nextInt(pictures.size()); 
... 
+0

私は仕事リストにインポートする必要がありますか? –

+0

@ LukaToni、私の更新を参照してください。 –

+1

@LukaToniは違反ですが、最初にいくつかの基本的なJavaの本を読むことをお勧めします。再び、犯罪は意味しません。 –

1

を使用しているあなたはranの宣言を与えられていないが、私はそれがだと思います標準のJDK乱数ジェネレータ。

同じ番号が2回選択されていないという保証はありません。真のランダムアルゴリズムでは、むしろ奇妙な保証になります。

これを解決する1つの方法は、リンクリスト(ここでは{0,1,2,3})に選択肢に対応する数字を入れることです。次に、0とあなたのリストのサイズ(ここでは3)の間のランダムな整数を選択します。あなたが '2'を得たとし、リストから2番目の要素を削除して{0,1,3}とします。次回は0と2の間の数字を選択します。もう一度「2」を表示すると、もう一度「3」の2番目の要素が削除されます。 Etc.

3

コレクションの使用は、取得と削除ではるかに優れたオプションです。配列では、既に選択されているインデックスのトラックを保持します。また、選択の数が配列の長さよりも大きい場合は、それに応じて例外をスローします。

関連する問題