我有一个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?
}
其他要点:
答案 0 :(得分:1)
您可以复制Set
,随机播放并获取前21个元素的子列表 -
List<Synapse> copy = new ArrayList<Synapse>(original);
Collections.shuffle(copy);
List<Synapse> sub = copy.subList(0, 21);
for(Synapse s : sub) { ... }
答案 1 :(得分:0)
将Set
转换为数组,然后访问数组中的21个随机元素。你的问题说集合只有100个元素,所以不应该太贵。如果您无法选择具体的Set
实现或更改填充集合的代码,那么沿着这些行的东西是唯一的选择。
如果你可以改变填充集合的代码,你当然可以在添加21个元素后停止它。如果您可以注入自己的Set
实现,则可以使用提供随机排序的实现,并仅迭代前21个元素。
答案 2 :(得分:0)
为了使它有点随机,你可以随机选择一个直到你达到21点。注意如果你只剩下足够的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++;
}
答案 3 :(得分: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,这将破坏。 }