我已经生成了一个20个唯一的随机数(介于1到300之间)的列表,并将其用于需要使用的东西。但是,我还需要将尚未加入列表的数字添加到另一个列表中,以用于其他功能。
这是我用来生成20个数字的随机列表的代码:
JToggleButton[][] p = new JToggleButton[5][4];
ArrayList<Integer> list = new ArrayList<Integer>();
Random rand = new Random();
for (int i = 0; i < p.length; i++) {
for (int j = 0; j < p[i].length; j++) {
int randomNum = rand.nextInt((300 - 1) + 1) + 1;
while (list.contains(randomNum)) {
randomNum = rand.nextInt((300 - 1) + 1) + 1;
}
list.add(randomNum);
// rest of code that I need the random number list for
我需要将这20个项目列表中未包含的其他280个数字放到另一个列表中,但是我不确定如何真正获取这些“未使用”的数字
答案 0 :(得分:0)
如果您确实确实需要两个列表,那么可以使用以下方法:
final int numberOfInts = 300;
List<Integer> excluded = new ArrayList<>();
for (int i = 1; i <= numberOfInts ; i++) {
excluded.add(i);
}
Random rand = new Random();
List<Integer> included = new ArrayList();
for (int i = 0; i < p.length; i++) {
included.add(excluded.remove(rand.nextInt(excluded.size())));
}
答案 1 :(得分:0)
永远带我了解您的问题。
ArrayList<Integer> otherNumbers = new ArrayList<Integer>();
for(int x = 0; x < list.size(); x++) {
if(!list.contains(x+1)) {
otherNumbers.add(x+1);
}
}
您只需跳过20号列表中包含的值即可填充新列表。
答案 2 :(得分:0)
我认为最好的方法是生成一个单独的列表,并在其中填充1到300之间的每个数字。之后,只需遍历生成的随机数列表,然后从1到300中删除那些元素清单。像这样的东西。
ArrayList<Integer> list300 = new ArrayList<Integer>();
For (int i = 1; i <= 300; i++) {
list300.add(i);
}
For (int i = 0; i < list.size(); i++) {
if (list300.contains(list[i])) {
list300.remove(Integer.vaueOf(list[i]));
}
}
答案 3 :(得分:0)
您可以创建一个以所有300个数字开头的List
,然后在向另一个列表中添加随机数时,只需将所有值从List
中删除相同的数字:
创建列表:
ArrayList<Integer> excludedNumbers = new ArrayList<>(300);
for (int i = 1; i <= 300; i++){
excludedNumbers.add(i);
}
在当前代码中添加一行:
ArrayList<Integer> randomList = new ArrayList<>();
Random rand = new Random();
for (int i = 0; i < p.length; i++) {
for (int i = 0; i < p[i].length; i++) {
int randomNum = rand.nextInt((300 - 1) + 1) + 1;
while (randomList.contains(randomNum)) {
randomNum = rand.nextInt((300 - 1) + 1) + 1;
}
excludedNumbers.remove((Integer) randomNum); // the new line
randomList.add(randomNum);
}
}
强制转换Integer
可以确保List
使用Object
删除功能而不是int
删除选项。
答案 4 :(得分:0)
我希望您的问题正确无误,因为这对我来说很难理解。 我会这样:
ArrayList<Integer> notIncludedNumbers = new ArrayList<Integer>();
for (int i = 0; i <= 300; i++){
if (!list.contains(i))
notIncludedNumbers.add(i);
}
如果您的列表中未包含20个随机数,则对1到300中的所有数字进行迭代,并将它们添加到notIncludedNumbers
列表中。
希望我能帮上忙。