Search code examples
javanumbersgenerate

i would like to random number but no repetition im coding above is it correct?


What I am trying to do is generate random number but no repetition i'm coding above is it correct?

public static void main(String[] args) {
    ArrayList<Integer> arrayLast = new ArrayList<Integer>();
    for (int arrayitems : getArray(10, 100)) {
        arrayLast.add(arrayitems);
    }
}

public static ArrayList<Integer> getArray(int arraysize, int range){
    ArrayList<Integer> array = new ArrayList<Integer>();
    ArrayList<Integer> arraybase = new ArrayList<Integer>();
    Random rnd = new Random();
    for (int i = 1; i <= range; i++) {
        arraybase.add(new Integer(i));
    }

    int k =0;       
    for (int j = 0; j < arraysize; j++) {
        if(range>arraysize) {
            int sayi = rnd.nextInt(range-arraysize);
            array.add(arraybase.get(sayi));
            arraybase.remove(sayi);
        }
        else {  
            int sayi = rnd.nextInt(arraysize-k);
            array.add(arraybase.get(sayi));
            arraybase.remove(sayi);
            k++;
        }
    }
    Collections.shuffle(array);         
    return array;
}  

Solution

  • Using Stream API in Java 8+, you can generate n distinct integers with a range from origin (inclusive) to bound (exclusive) by using this method:

    public static List<Integer> randomInts(int n, int origin, int bound) {
        return ThreadLocalRandom.current().ints(origin, bound)
                .distinct()
                .limit(n)
                .collect(ArrayList::new, ArrayList::add, ArrayList::addAll);
    }
    

    Example:

    // generate 15 distinct random numbers greater than or equal to 10 and less than 90
    List<Integer> randoms = randomInts(15, 10, 90);