@iamderlencer

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

Мне нужно сделать генерацию рандомных чисел на 5-ти разных обьектах каждые несколько секунд, при этом чтобы все эти числа не были равны друг другу
IEnumerator RandomArea(){
        if(targetId == 1){
            yield return new WaitForSeconds(0.9f);
        }else if(targetId == 2){
            yield return new WaitForSeconds(0.91f);
        }else if(targetId == 3){
            yield return new WaitForSeconds(0.92f);
        }else if(targetId == 4){
            yield return new WaitForSeconds(0.93f);
        }else if(targetId == 5){
            yield return new WaitForSeconds(0.94f);
        }
        zone = Random.Range(1, 5);
        if(targetId == 2){
            while (zone == rP1.zone){
                zone = Random.Range(1,5);
                Debug.Log("А");
            }
        }else if(targetId == 3){
            while (zone == rP2.zone || zone == rP1.zone){
                zone = Random.Range(1,5);
                Debug.Log("А");
            }
        }else if(targetId == 4){
            while(zone == rP3.zone || zone == rP2.zone || zone == rP3.zone){
                zone = Random.Range(1,5);
                Debug.Log("А");
            }
        }else if(targetId == 5){
            while(zone == rP4.zone || zone == rP3.zone || zone == rP2.zone || zone == rP3.zone){
                zone = Random.Range(1,5);
                Debug.Log("А");
            }
        }
        yield return new WaitForSeconds(5f);
        yield return StartCoroutine(RandomArea());
    }

Извиняюсь за столько if и else)
  • Вопрос задан
  • 116 просмотров
Пригласить эксперта
Ответы на вопрос 3
GavriKos
@GavriKos Куратор тега Unity
Если +- известно какое количество надо в итоге получить (или когда уже история не важна) - то.
Делаешь массив от 1 до N, перемешиваешь его случайно, и собсно дальше берешь последовательно из него числа.
Да, в какой то момент массив кончится - но возможно это подойдет по условию. Зато у тебя 100% известно время на поиск нового случайного числа - оно постоянно и не зависит ни от чего )
Ответ написан
Комментировать
TheBeJIIHiu
@TheBeJIIHiu
Просто обычный кодер?
using System;
using UnityEngine;

public class UniqueRandomNumbers : MonoBehaviour
{
    private int[] numbers = new int[5];

    void Start()
    {
        GenerateUniqueRandomNumbers();
    }

    void GenerateUniqueRandomNumbers()
    {
        for (int i = 0; i < 5; i++)
        {
            numbers[i] = GenerateUniqueRandomNumber(0, 10, numbers);
        }

        Debug.Log("Generated unique random numbers: " + String.Join(", ", numbers));
    }

    int GenerateUniqueRandomNumber(int min, int max, int[] usedNumbers)
    {
        int randomNumber = UnityEngine.Random.Range(min, max);

        while (Array.IndexOf(usedNumbers, randomNumber) != -1)
        {
            randomNumber = UnityEngine.Random.Range(min, max);
        }

        return randomNumber;
    }
}
Ответ написан
@Nikolae
Можно реализовать это следующим образом:

  1. Создать массив из 5 элементов и заполнить его случайными числами.
  2. Проверить, есть ли повторяющиеся числа в массиве. Если есть, то заменить их на новые случайные числа.
  3. Использовать эти 5 уникальных чисел на 5 разных объектах.

Примерный код на языке C#:
int[] randomNumbers = new int[5];
System.Random rnd = new System.Random();

// заполнение массива случайными числами
for (int i = 0; i < randomNumbers.Length; i++) {
    randomNumbers[i] = rnd.Next(1, 100);
}

// проверка на повторяющиеся числа и замена их на новые случайные числа
for (int i = 0; i < randomNumbers.Length; i++) {
    for (int j = i + 1; j < randomNumbers.Length; j++) {
        if (randomNumbers[i] == randomNumbers[j]) {
            randomNumbers[j] = rnd.Next(1, 100);
            j = i + 1; // начинаем проверку заново, чтобы убедиться, что все числа уникальны
        }
    }
}

// использование уникальных чисел на 5 разных объектах
for (int i = 0; i < 5; i++) {
    int randomNumber = randomNumbers[i];
    // использование числа на i-ом объекте
    // ...
}

Вы можете настроить параметры rnd.Next(minValue, maxValue) для генерации чисел в нужном диапазоне. Также можно изменить количество элементов в массиве или количество объектов, на которых нужно использовать эти числа.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы