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

Я делаю игру в рулетку, я создал Arraylist для слотов, они были определены в упорядоченном списке, есть 38 слотов с позициями (0-37), цветом и номером.

В «Методе вращения» я пытаюсь выбрать случайный начальный слот из коллекции/списка колес, а затем прокручивать некоторые слоты на основе функции задержки.

Как мне выбрать случайный слот из моей коллекции, чтобы начать этот процесс?

Моя коллекция

    List<Slot> wheel = new ArrayList<Slot>();
    GameEngine gameEngine;

    public GameEngineImpl() {
        Color colorArray[] = new Color[] { Color.GREEN00, Color.RED, Color.BLACK, Color.RED, Color.BLACK, Color.RED,
                Color.BLACK, Color.RED, Color.BLACK, Color.RED, Color.BLACK, Color.RED, Color.BLACK, Color.RED,
                Color.BLACK, Color.RED, Color.BLACK, Color.RED, Color.BLACK, Color.GREEN0, Color.BLACK, Color.RED,
                Color.BLACK, Color.RED, Color.BLACK, Color.RED, Color.BLACK, Color.RED, Color.BLACK, Color.RED,
                Color.BLACK, Color.RED, Color.BLACK, Color.RED, Color.BLACK, Color.RED, Color.BLACK, Color.RED };
        int numberArray[] = new int[] { 00, 27, 10, 25, 29, 12, 8, 19, 31, 18, 6, 21, 33, 16, 4, 23, 35, 14, 2, 0, 28,
                9, 26, 30, 11, 7, 20, 32, 17, 5, 22, 34, 15, 3, 24, 36, 13, 1 };
        for (int position = 0; position < 38; position++) {
            wheel.add(new SlotImpl(position, colorArray[position], numberArray[position]));
        }
    }

Метод вращения

@Override
    public void spin(int initialDelay, int finalDelay, int delayIncrement) {
        Slot slot;
        while (initialDelay < finalDelay) {

        //  TODO selecting a random starting slot on the wheel 


                }
            }

            // Delay function
            delay(delayIncrement);
            // Increase increment
            initialDelay += delayIncrement;
        }

    }
    // Method to delay spinning
    private void delay(int delay) {
        try {
            Thread.sleep(delay);
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
        }
    }

«Как мне сделать что-то случайный в Java» Вы ищете в Интернете java random, читаете статьи и узнаете, как это сделать.

Andreas 07.04.2019 06:04
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
1
309
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Вы можете использовать Random::nextInt для генерации случайного целого числа:

int random = new java.util.Random().nextInt(38);
//nextInt: int value between 0 (inclusive) and the specified value (exclusive)

Чтобы перебирать элементы, вы можете использовать либо поток, либо цикл for. Ниже приведен пример потока:

wheel.subList(random, 37).stream().forEach(e -> {
    // e is the element
});

for петля:

for(int i = random; i < 38; i++) {
    var e = wheel.get(i); // e is the element
}

Два простых варианта:

  • используйте java.util.Random для генерации случайного целого числа в диапазоне возможных индексов вашего массива.
  • используйте Collections.shuffle(), чтобы просто расположить список в случайном порядке, а затем каждый раз выбирать первую запись.

Другие вопросы по теме