Заполнение массива рандомными числами без повтора

184
15 апреля 2022, 10:10

Компьютер генерирует пять чисел в диапазоне от 1 до 15 включительно... Код вроде написать удалось с проверкой на одинаковые числа и вроде все генерируется, но иногда при запуске на консоль ничего не выводится и цикл бесконечный, может кто подскажет что не так?

    int random;
    boolean check;
    check = true;
    int[] rand = new int[5];
    for (int i = 0; i < rand.length; i++) {
        while (true) {
            
            random = 1 + (int) (Math.random() * 15);
            
            for (int j = 0; j < rand.length; j++) {
                if (rand[j] == random) {
                    check = false;
                    break;
                }
            }
            if (check == true) {
                break;
            }
        }
        rand[i] = random;
    }
    for (int x : rand) {
        System.out.println(x);
    }
Answer 1

Как вариант еще так , через shuffle. Берете все числа от 1 до 15. Заполняете ими список. Перемешиваете его. Берете 5 элементов списка. :

List<Integer> list = new ArrayList<>();
    for (int  i = 1; i <16 ; i++ ){
        list.add(i);
    }
    Collections.shuffle(list);
    int[] rand = new int[5];
    for (int i = 0; i < rand.length; i++){
        rand[i]  = list.get(i);
       
    }
    for (int x : rand) {
        System.out.println(x);
    }
Answer 2

Так посмотрите.

public static void main(String[] args) {
    int random;    
    Set<Integer> unique = new LinkedHashSet<>(); // хранит в порядке добавления, если нужен упорядоченный то используйте TreeSet
    while (unique.size() < 5) {    
      random = 1 + (int) (Math.random() * 15);    
      unique.add(random);
    }
    for (int x : unique) {
      System.out.println(x);
    }
  }
READ ALSO
Создание aws role ,s3 buckets и lambda function кодом на джаве

Создание aws role ,s3 buckets и lambda function кодом на джаве

Я новичок в AWS у меня есть программа, которая делает некие операции над видео (конвертирует один формат в другой (есть два бакита в первый загружается...

261
как правильно использовать метод instanceof

как правильно использовать метод instanceof

Дана задача: Создать статический метод printMagazines(Printable[] printable) в классе Magazine, который выводит на консоль названия только журналовСоздать статический...

256
Java задача на использование Swing

Java задача на использование Swing

Необходимо написать программу, в которой при нажатии мышки создаётся квадратик синего цвета, при двойном нажатии на синий квадратик цвет...

199