【发布时间】:2019-05-11 13:00:50
【问题描述】:
在我的代码中,“count0”、“count1”和“count2”接收随机值,“totalCount”是它们的总和。这里我已经简化了。
使用此代码,我可以选择 ArrayList 的随机元素,但如果例如“count0”等于 0,它将不仅在第一次而且每次迭代时都会从 ArrayList 中删除索引 0,如果发生这种情况会导致错误。 这个想法是如何从食品储藏室中随机选择成分,当一种用完时,你仍然可以从其余的中选择。
感谢您的帮助 =)
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Random;
public class RndNumArray {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
int totalCount=4, count0=1, count1=1, count2=2;
Random rnd = new Random();
ArrayList<Integer> numbers = new ArrayList<>(Arrays.asList(0, 1, 2));
while(totalCount > 0){
int rand = rnd.nextInt(numbers.size());
int num = numbers.get(rand);
if (num == 0) {
count0--;
if (ccount0 == 0) {
numbers.remove(0);
}
}
if (num == 1) {
count1--;
if (count1 == 0) {
numbers.remove(1);
}
}
if (num == 2) {
count2--;
if (count2 == 0) {
numbers.remove(2);
}
}
totalCount--;
System.out.println(num);
}
}
}
【问题讨论】:
-
请注意,
numbers.remove(0);的意思不是“删除值 0”,而是“删除索引 0 处的元素”(因为remove(int)比remove(Object)更专业)。因此,您需要使用remove(Integer.valueOf(0))等 - 如果您删除一个元素,则所有后续元素的索引都会减小,因此如果您的列表仅包含 2 个元素,remove(2)将不起作用。 -
你可能过于复杂了。您能否展示并解释您的预期输出计数 0-2 的示例?
-
您可以使用
Map。Key可以是项目,Value可以是项目数。
标签: java arrays arraylist random collections