2017-06-08 7 views
4

要素を除いて、配列リストからランダム要素を選択するにはどうすればよいですか? はここに私のArrayListです:arraylistから複数/ランダム要素を選択

ArrayList <String> provinces = new ArrayList(); 

Collections.addAll(
    provinces, 
    "New Brunswick", 
    "Saskatchewan", 
    "Ontario", 
    "Nova Scotia", 
    "Quebec", 
    "Alberta"); 

この例では、私はサスカチュワンを除いて、ランダムな他の要素で選択したいと思います。

for(int i == provinces.get (0); i < provinces.get(1); i > provinces.get(2); i < provinces.get(5)) { 

    int getPossibleAnswers = (int) Math.floor(Math.random()*i);    
    String displayPossibleAnswers = provinces.get(getPossibleAnswers);     
    outputAnswers.append(displayPossibleAnswers + "\n"); 
    } 

は明らかに、このコードは動作しません、と私は何をするか分からない:

私がやってみました。 ありがとうございます!

+0

あなたはいくつの要素が必要ですか? –

+1

サスカチェワンなしでリストを作成し、その上に 'Collections.shuffle'を適用してみませんか? –

答えて

4

サスカチュワン州のインデックスを除いて、すべてのインデックス値のリストを作成し、それをシャッフルします。

List<String> provinces = Arrays.asList("New Brunswick", "Saskatchewan", "Ontario", "Nova Scotia", "Quebec", "Alberta"); 

List<Integer> indexes = new ArrayList<>(); 
for (int i = 0; i < provinces.size(); i++) 
    if (! provinces.get(i).equals("Saskatchewan")) 
     indexes.add(i); 
Collections.shuffle(indexes); 

StringBuilder outputAnswers = new StringBuilder(); 
for (int i : indexes) 
    outputAnswers.append(provinces.get(i) + "\n"); 

System.out.print(outputAnswers); 

サンプル出力

Nova Scotia 
Quebec 
Ontario 
Alberta 
New Brunswick 
+0

Javaの初心者です。コロン(:)は何ですか? –

+0

@PendleSこれは拡張された 'for'ループで、foreachループとも呼ばれます。参考資料:[Java for Enhanced for Loopの構文は何ですか?](https://stackoverflow.com/q/11685305/5221149) – Andreas

+0

お返事ありがとうございます –

1

mentionedは単にlist

をシャッフルその後、 list

Saskatchewanなし
ArrayList <String> provinces = new ArrayList<>(Arrays.asList("New Brunswick", 
            "Ontario", "Nova Scotia", 
            "Quebec", "Alberta")); 

を作成すると、簡潔な、それを維持するために

デモ

ArrayList <String> provinces = new ArrayList<>(Arrays.asList("New Brunswick", 
            "Ontario", "Nova Scotia", 
            "Quebec", "Alberta")); 
Collections.shuffle(provinces); 
StringBuilder builder = new StringBuilder(); 
for (String s:provinces) { 
    builder.append(s+"\n"); 
} 
System.out.println(builder); 

出力:

Quebec 
New Brunswick 
Alberta 
Ontario 
Nova Scotia 
0
ArrayList <String> provinces = new ArrayList<>(); 
String removeValue = null; 
Collections.addAll(
    provinces, 
    "New Brunswick", 
    "Saskatchewan", 
    "Ontario", 
    "Nova Scotia", 
    "Quebec", 
    "Alberta"); 

for (Iterator<String> iterator = provinces.iterator(); iterator.hasNext();) { 
    String value = iterator.next(); 
    if (value.equals("Saskatchewan")) { 
     removeValue = value; 
     iterator.remove(); 
    } 
} 

Collections.shuffle(provinces); 

for(String p: provinces){ 
    System.out.println(p); 
} 

provinces.add(removeValue); 

強化forループはremove()では動作しませんでしたので、私はIteratorを使用しますがIteratorずに、ループインデックス(番号)を使用することができます。

Iteratorなし:

for (int j = 0; j<provinces.size(); j++) { 
    if(provinces.get(j).equals("Saskatchewan")){ 
     removeValue = provinces.get(j); 
     provinces.remove(provinces.get(j)); 
    } 
} 

また独自のメソッドを作成することができCollections.shuffle()を使用しません。それを行うにはthis questionを見てください。

0

あなたは、多くの場合、ランダム(無作為化試験のためなど)が必要な場合は、あなたがQala Datagen依存関係を追加して、このようなランダムな要素を取得することができます:

String e = sample(provinces); 

あなたはまだから余分な要素を削除する必要があると思いますがコレクション。

免責事項:私はlibの著者です。

関連する問題