2017-10-31 6 views
0

私はルーキーです。私は文字列の配列を持つArrayListからランダムに異なる要素を選択する必要があります。私はカップルの異なる方法を試みたが、それは毎回同じ配列を選択している。ここで私が試みた方法がある。Javaの文字列の配列のArrayListから異なるランダム要素を選択

public static void RandomSchedules(ArrayList<String[]> list) 
{ 
    Random randomizer = new Random(); 
    for(int i=1; i<11; i++) 
    { 

    String[] random = list.get(new Random().nextInt(list.size())); 
    System.out.println("Random Schedule " + ":" + Arrays.toString(random)); 
    } 
} 

私も上記のコードでこれを試しました。

String[] random = list.get(randomizer.nextInt(list.size())); 

しかし結果は同じです。

これは私が

List<String[]> randomPicks = pickNRandom(lst, 10); 

は誰がどのように異なる要素を得るために私を導くだろう、と私は上記の関数を呼び出していますスタックオーバーフロー

public static List<String[]> pickNRandom(ArrayList<String[]> lst, int n) { 
List<String[]> copy = new LinkedList<String[]>(lst); 
Collections.shuffle(copy); 
return copy.subList(0, n); 
} 

から試してみましたが、他のアプローチです。

+0

重複した配列があるように私に聞こえます。内容を確認しましたか? – shmosel

+0

[mcve]を入力してください。 – shmosel

答えて

3

ランダム化オブジェクトは使用しませんが、ループのたびに新しいものを作成します。だからあなたが作成したものを使用してください(毎回新しいランダム呼び出しを避ける)。 試してみてください:

public static void RandomSchedules(ArrayList<String[]> list) 
{ 
    Random randomizer = new Random(System.currentTimeMillis()); 
    for(int i=1; i<11; i++) 
    { 
     String[] random = list.get(randomizer.nextInt(list.size())); 
     System.out.println("Random Schedule " + ":" + Arrays.toString(random)); 
    } 
} 
+0

あなたの入力リストは何ですか? 1つのString [](list.size()== 1)だけであれば、それが実行されますが、リスト内の複数のstring []は可変出力を生成します – skim

関連する問題