Java 如何在一定范围内生成一个随机数列表,然后得到该列表中不包含的数

Java 如何在一定范围内生成一个随机数列表,然后得到该列表中不包含的数,java,random,int,Java,Random,Int,我已经生成了一个由20个介于1和300之间的唯一随机数组成的列表,并将其用于我需要使用它的目的。但是,我还需要将尚未添加到列表中的数字添加到另一个列表中,以便在另一个函数中使用 以下是我用来生成20个数字的随机列表的代码: JToggleButton[][] p = new JToggleButton[5][4]; ArrayList<Integer> list = new ArrayList<Integer>(); Random rand = new Rand

我已经生成了一个由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
JToggleButton[]p=新的JToggleButton[5][4];
ArrayList=新建ArrayList();
Random rand=新的Random();
for(int i=0;i

我需要将这20项列表中未包含的其他280个数字放入另一个列表中,但我不确定如何实际获取这些“未使用”的数字如果您确实需要两个列表,如您所说,那么这里有一种方法:

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())));
}
final int numberOfInts=300;
排除列表=新的ArrayList();

因为(int i=1;i花了我很长时间才明白你的问题是什么

    ArrayList<Integer> otherNumbers = new ArrayList<Integer>();
    for(int x = 0; x < list.size(); x++) {
        if(!list.contains(x+1)) {
            otherNumbers.add(x+1);
        }
    }
arraylistothernumbers=newarraylist();
对于(int x=0;x

您可以跳过20个数字列表包含的值来填充新列表。

我认为最好的方法是生成一个单独的列表,并用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]));
    }
}
ArrayList list300=新建ArrayList();

对于(int i=1;i您可以创建一个包含所有300个数字的
列表,然后在向另一个列表添加随机数时,只需从包含所有值的
列表中删除相同的数字即可:

创建列表:

    ArrayList<Integer> excludedNumbers = new ArrayList<>(300);
    for (int i = 1; i <= 300; i++){
        excludedNumbers.add(i);
    }
ArrayList excludedNumbers=新的ArrayList(300);

对于(inti=1;i我希望我正确地回答了你的问题,因为这对我来说有点难理解。 我会这样做:

ArrayList<Integer> notIncludedNumbers = new ArrayList<Integer>();
for (int i = 0; i <= 300; i++){
   if (!list.contains(i))
      notIncludedNumbers.add(i);
}
ArrayList NotIncludedNumber=new ArrayList();

对于(inti=0;i rand.nextInt((300-1)+1)+1有点奇怪bit@user8426627你能告诉我为什么吗?@user8426627它实际上指的是
rand.nextInt((上限-下限)+1)+lowerLimit
,这很有意义,它只是看起来很奇怪,所有东西都是
1
,没有变量。
IntStream.rangeClosed(1300).filter(项->!list.contains(项)).boxed().collect(Collectors.toList())
?这就是我要寻找的,但是我如何从列表中获取单个int项,然后将它们添加到一个数据库表中?例如@hiro228只需像其他列表一样迭代列表?您很可能需要使用JDBC连接到数据库。这超出了这个问题的范围nd我建议您尝试一下,如果您遇到问题,请提出关于数据库部分的新问题。我已经设置了数据库,我的意思是我需要将这些单独的int项单独放入数据库中。即使只是在控制台上单独打印出来,而不是[1,4,77,299,3…]1.我完全是初学者java@hiro228另外,我将第一个数组的边界改为1到300,而不是0到299,这是之前循环中的一个小错误。我想我会让你知道的。
ArrayList<Integer> notIncludedNumbers = new ArrayList<Integer>();
for (int i = 0; i <= 300; i++){
   if (!list.contains(i))
      notIncludedNumbers.add(i);
}