如何使用Java按顺序生成20个唯一的随机数?

如何使用Java按顺序生成20个唯一的随机数?,java,Java,我是编程新手,我刚开始做一个程序,我想生成和排序20个唯一的随机数,然而我只能生成不唯一的数字,也不能使用这个脚本排序 import java.util.Random; class FTW { public static void main (String[]args){ Random I = new Random(); int number; for(int counter=1; counter<=20;counter++)

我是编程新手,我刚开始做一个程序,我想生成和排序20个唯一的随机数,然而我只能生成不唯一的数字,也不能使用这个脚本排序

import java.util.Random;

class FTW {
    public static void main (String[]args){
        Random I  = new Random();
        int number; 

        for(int counter=1; counter<=20;counter++){
            number = I.nextInt(20);
            System.out.println(number + " ");
        }
    }
}
import java.util.Random;
类FTW{
公共静态void main(字符串[]args){
随机I=新随机();
整数;

对于(int counter=1;counter,使用哈希集将保留唯一性

这将提供一组从1到50的20个随机数字

  public static void main(final String[] args){
        final Random random = new Random();
        final Set<Integer> intSet = new HashSet<>();
        while (intSet.size() < 20) {
            intSet.add(random.nextInt(50) + 1);
        }
        final int[] numbers = new int[intSet.size()];
        final Iterator<Integer> iter = intSet.iterator();
        for (int i = 0; iter.hasNext(); ++i) {
            numbers[i] = iter.next();
        }
        System.out.println(Arrays.toString(numbers));
    }
publicstaticvoidmain(最终字符串[]args){
最终随机数=新随机数();
final Set intSet=new HashSet();
while(intSet.size()<20){
intSet.add(random.nextInt(50)+1);
}
final int[]number=新int[intSet.size()];
最终迭代器iter=intSet.Iterator();
for(int i=0;iter.hasNext();++i){
数字[i]=iter.next();
}
System.out.println(Arrays.toString(numbers));
}

一种方法是将数字添加到ArrayList中,并检查它是否包含while循环中的下一个随机数。(这是0-100之间的20个唯一随机数)

公共类FTW{
公共静态void main(字符串[]args){
随机I=新随机();
列表=新的ArrayList();
整数;

对于(int counter=1;counter您可以按照以下步骤操作:
1。维护一个
ArrayList
以存储生成的唯一随机数(
uniqueSortedRandoms
)。
2.在将新编号
newNumber
插入此
ArrayList
时,检查数组
uniqueSortedRandoms
是否包含
newNumber
以及
newNumber
是否大于或等于上一个编号。假设数组按升序排序。请参阅以下内容代码-

import java.util.Random;

class FTW {
    public static void main (String[]args){
        Random I  = new Random();
        int newNumber;
        List<Integer> uniqueSortedRandoms = new ArrayList<Integer>();


        for(int counter=1; counter<=20;){

            int previousNumber = -1 // initially set to -1
                                    // because nextInt() can be 
                                    //range from 0 (inclusive) to 20 exclusive
            newNumber = I.nextInt(20);

            if(newNumber>previousNumber && !unqueSortedRandoms.contains(newNumber)){

               uniqueSortedRandoms.add(newNumber);
               previousNumber = newNumber;
               counter++;  
            }

            System.out.println(number + " ");
        }
    }
}

现在,each
newNumber
将在范围内-
0有一种方法可以生成唯一的、已排序的数字,而无需排序。您可以创建布尔值数组,选择哪个数字,该索引为真

public static void main(String[] args) {
        int maxNumber = 150;
        int totalCount = 20;        
        Random random = new Random();

        boolean[] generatedNumbers = new boolean[maxNumber];
        int generatedCount = 0;

        while (generatedCount < totalCount){
            int newNumber = random.nextInt(maxNumber);
            if (generatedNumbers[newNumber] == false){
                generatedNumbers[newNumber] = true;
                generatedCount++;
            }
        }

        int[] sortedUniqueArray = new int[totalCount];

        int selectedNumbers = 0;
        for (int i = 0; i < generatedNumbers.length; i++) {
            if (generatedNumbers[i] == true){
                sortedUniqueArray[selectedNumbers] = i;
                selectedNumbers++;                
            }
        }

        System.out.println(Arrays.toString(sortedUniqueArray));
    }

类FTW,真的吗?…将它们添加到一个排序集中,直到达到大小20@ctwomey1对不起,这并不意味着秩序,意味着独特,现在会改变的。谢谢很多人,它工作得很好:):)关于FTW这个名字,是因为我尝试了太多次,有太多的类名,结果我得到了比这个更奇怪的名字xD@Tim在这种情况下,你可以考虑投票或接受答案:
newNumber = I.nextInt(100);
public static void main(String[] args) {
        int maxNumber = 150;
        int totalCount = 20;        
        Random random = new Random();

        boolean[] generatedNumbers = new boolean[maxNumber];
        int generatedCount = 0;

        while (generatedCount < totalCount){
            int newNumber = random.nextInt(maxNumber);
            if (generatedNumbers[newNumber] == false){
                generatedNumbers[newNumber] = true;
                generatedCount++;
            }
        }

        int[] sortedUniqueArray = new int[totalCount];

        int selectedNumbers = 0;
        for (int i = 0; i < generatedNumbers.length; i++) {
            if (generatedNumbers[i] == true){
                sortedUniqueArray[selectedNumbers] = i;
                selectedNumbers++;                
            }
        }

        System.out.println(Arrays.toString(sortedUniqueArray));
    }
[6, 19, 33, 47, 51, 53, 71, 75, 82, 86, 89, 92, 105, 108, 121, 125, 126, 137, 140, 147]