0

oneHundredInactiveSynapses のセットがあり、そのセット内の 100 個の inactiveSynapses のうちランダムな 21 個を操作してから停止したいと考えています。これを行う簡単な方法があるはずだと思いますが、今は何も思いつきません。

for (Synapse inactiveSynapse : oneHundredInactiveSynapses) {
    // I want to call a method on the inactiveSynapse like
        inactiveSynapse.setActiveState(true);
        // but I only want to do this to 21 of the synapses. How can I do this?
}

その他のポイント:

  1. oneHundredInactiveSynapses を配列にすることはオプションではありません
  2. どの21人が活躍しても構わない
4

4 に答える 4

1

、シャッフルのコピーを作成してSet、最初の 21 要素のサブリストを取得できます -

List<Synapse> copy = new ArrayList<Synapse>(original);
Collections.shuffle(copy);
List<Synapse> sub = copy.subList(0, 21);
for(Synapse s : sub) { ... }
于 2013-06-18T23:13:55.693 に答える
0

少しランダムにするために、21 に到達するまで発火するものをランダムに選択することができます。終わり。

    int chosen = 0;
    int left = oneHundredInactiveSynapses.size();
    java.util.Random rand = new java.util.Random();
    for (Synapse inactiveSynapse : oneHundredInactiveSynapses) {
        if(left-chosen>21) inactiveSynapse.setActiveState(true);
        else{
          if(rand.nextBoolean()){
            inactiveSynapse.setActiveState(true);
            chosen++;
            if(chosen==21) break;
          }
        }
        left--;
   }

ただし、ランダム性を本当に気にしない場合は、カウントを使用して最初の 21 を選択するだけです。

   int count = 0;
   for(Synapse inactiveSynapse : oneHundredInactiveSynapses){
     if(count==21) break;
     inactiveSynapse.setActiveState(true);
     count++;

   }
于 2013-06-18T23:11:47.943 に答える
0

最初の 21 で問題ない場合は、次のことができます。

int count = 0
for (Synapse inactiveSynapse : oneHundredInactiveSynapses) {
    if(count < 21){
        inactiveSynapse.setActiveState(true);  
        count++;        
    }else{
         break; 
    }

}

ランダムにしたい場合は、次のことができます。

java.util.Random rand = new java.util.Random();
    int count = 0
    for (Synapse inactiveSynapse : oneHundredInactiveSynapses) {
        if(rand.nextInt(100) % 2){
            next;
        }
        if(count < 21){
            inactiveSynapse.setActiveState(true); 
             count++;         
        }else{
           break; 
        }

これは、乱数が偶数の場合、21 になるまで次の要素に進みますが、これは壊れます。}

于 2013-06-18T23:14:10.270 に答える
0

を配列に変換してSetから、配列の 21 個のランダムな要素にアクセスします。あなたの質問によると、セットには 100 個の要素しかないため、それほど高価ではありません。Set具体的な実装を選択できない場合、またはセットに入力するコードを変更できない場合は、これらの線に沿ったものしか選択肢がありません。

セットに入力するコードを変更できる場合は、もちろん、21 個の要素を追加した時点で停止させることができます。Set独自の実装を注入できる場合は、ランダムな順序を提供する実装を作成し、最初の 21 要素のみを反復処理できます。

于 2013-06-18T22:59:35.173 に答える