簡體   English   中英

如何使用Java生成20個帶有訂單的唯一隨機數?

[英]How to generate 20 unique random numbers with order using 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++){
            number = I.nextInt(20);
            System.out.println(number + " ");
        }
    }
}

任何人都可以幫我編輯這個或者可以給我一個更好的工作,並在可能的情況下向我解釋:)

使用HashSet將保留唯一性

這將提供從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));
    }

一種方法是將數字添加到ArrayList並檢查它是否包含while循環中的下一個隨機數。 (這些是從0到100的20個唯一隨機數)

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

        for(int counter=1; counter<=20;counter++){
            number = I.nextInt(100);
            while(list.contains(number)) {
                number = I.nextInt(100);
            }
            list.add(number);
        }
        Collections.sort(list); //Sorts the list
        System.out.println(list);
    }
}

您可以按照以下步驟操作:
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 + " ");
        }
    }
}

現在, ArrayList - uniqueSortedRandoms按升序包含您需要的所有唯一隨機數。

注意:
1.如果你使用random.nextInt(20)那么它將生成一個從0到20的獨立的隨機數。 並且您需要按排序順序排列20個隨機數。 所以數組列表實際上包含從0到19 20個號碼在這種情況下你可以生成arrayList編號從0到19.Or如果你需要在排序順序20張隨機數(不在范圍0〜19),例如[ nextInt(int n) ,......]那么你可以使用一個非常大的int作為nextInt(int n)的參數 -

newNumber = I.nextInt(100);

現在每個newNumber將在0<=newNumber<100的范圍內。 因此,您的數組將按升序包含20個唯一的隨機數。

2. counterif-block內遞增(當新生成的隨機數插入ArrayList ),循環繼續,直到我們得到第20個隨機數。

有辦法如何生成唯一的,排序的數字,而無需排序。 您可以創建布爾數組和您選擇的數字,該索引為true。

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]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM