2016-04-28 13 views
-1

乱数を使用していますが、0から7までの乱数を生成しています。しかし、問題があります。
私はボタンクリックで乱数を生成しています。だから、ボタンをクリックするといつか別の乱数が得られるかもしれませんが、いつかは繰り返し数が繰り返されます。例として:乱数を繰り返さないで生成する方法

ボタンクリックで

、時には数が0-7の範囲の間で繰り返されるように:あなたのよう

1-3-4-3-6-3-5-5
見ることができる、3は複数回繰り返され、5も一緒に2回出現する。

したがって、2種類の繰り返しがあります。今、私が欲しいもの

int randomNumber; 
do { 
    randomNumber = random.nextInt(7 - 0 + 1) + 0; 
} while (randomNumber == lastRandomNumber); 
lastRandomNumber = randomNumber; 
Log.d("RandomNumber","= "+randomNumber); 
return randomNumber; 

:私は2番目の繰り返し(5の繰り返し)を殺すことになって、次のコードを、書かれている

は、それは最後の乱数を追跡することで、しかし、今私は以前に生成された乱数をすべて追跡したいと思う。しかし、どうしたらいいですか?これを達成するための最適な方法は何ですか?私を案内したり、コードを教えてください。例のため

答えて

6
Integer[] arr = {...}; 
Collections.shuffle(Arrays.asList(arr)); 

は:

List<Integer> ran_num; 
     public static void main(String[] args) { 
      Integer[] arr = new Integer[1000]; 
      for (int i = 0; i < arr.length; i++) { 
       arr[i] = i; 
      } 
      Collections.shuffle(Arrays.asList(arr)); 

      ran_num=new ArrayList<Integer>(Arrays.toString(arr)); 

     } 

abvoeコードが で見つけることができる:生成されたリストからJava generating non-repeating random numbers

一の番号を取得し、それを削除します。 次回は同じリストから番号を取得します。

は今、あなたのためにあなたがするたびに1つの余分メソッドを作成して新しい番号を取得したい場合:

public static int fetch(){ 

    int num=ran_num.get(0); 
    ran_num.remove(0); 

if(ran_num.size()==0) 
// call some method to regenerate the list as explained in above code 

return num; 
} 
+2

は、この何で、どのようにして使うことができますか? –

+1

これは乱数を得る別の方法ですが、私はそれがあなたが望むものではないと信じています。 – dquijada

+0

申し訳ありませんが、私は質問を間違って解釈しました。 7つの数字でリストを生成し、リストから最後に選択した数字を削除することができます。次回は残りの6つの数字からランダムに取得します – ashwinbhy

関連する問題