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

Это любимая панель. Вы можете выбрать числа (нажатием кнопки), и я хотел бы добавить это число в массив, а затем получить случайное число из этого массива.

public int runs;
public int randomNumber;
public int[] favorites = new int[75];

public void RandomButton()
{
    if (DataController.Instance.group == 3)
    {
            favorites[randomNumber] = UnityEngine.Random.Range(0, favorites.Length);
            Debug.Log(favorites[randomNumber]);
    }
}

public void b0()
{
    for (runs = 0; runs < favorites.Length; runs++)
    {
        favorites[runs] = 0;
    }
}

public void b1()
{
    for (runs = 0; runs < favorites.Length; runs++)
    {
        favorites[runs] = 1;
    }
}

Я застрял, потому что я получаю случайное число от 0 до 75. Я хотел бы получить случайное число из массива избранного после того, как я нажму на кнопки.


person Xerodus    schedule 28.06.2020    source источник
comment
Используйте List<int> вместо массива фиксированного размера, он лучше подходит для ваших нужд.   -  person Gusman    schedule 28.06.2020
comment
@Gusman в Unity общедоступный массив инициализируется через инспектор и настраивается разработчиком. Поэтому, если вам не нужно добавлять или удалять элементы во время выполнения с помощью кода, List<int> или int[] ведут себя в основном одинаково;)   -  person derHugo    schedule 29.06.2020
comment
@derHugo, если вы прочитаете вопрос, вы увидите, что пользователь динамически добавляет значения во время выполнения посредством взаимодействия с пользователем. И наличие свойства Count, позволяющего узнать, сколько чисел в списке, является ключом к решению его проблемы. Итак, List<int> это то, что ему нужно.   -  person Gusman    schedule 29.06.2020
comment
@ Гусман хорошая мысль! На самом деле не заметил, что добавление значений также было частью вопроса   -  person derHugo    schedule 29.06.2020
comment
@derHugo Проблема в том, что код не имеет ничего общего с вопросом, это совершенно другое, что он спрашивает, и что он делает;)   -  person Gusman    schedule 29.06.2020


Ответы (2)


Что ты здесь делаешь

favorites[randomNumber] = UnityEngine.Random.Range(0, favorites.Length);

Назначает случайное значение между 0 и 74 элементу в вашем массиве.. в зависимости от того, какое значение randomNumber имеет в данный момент...

То, что вы хотите сделать, это фактически получить доступ к значению из массива, используя случайное значение в качестве индекса, например

randomNumber = favorites [UnityEngine.Random.Range(0, favorites.Length)];
Debug.Log(randomNumber);

Однако какая разница, если вы заполняете свой массив всегда одними и теми же числами, используя b0 и b1?

После запуска этих методов все элементы в любом случае либо 0, либо 1...


В любом случае в своем вопросе вы также спрашиваете, как добавить номер.

Вы не должны использовать для этого массив, а скорее List<int> как

public List<int> favorites = new List<int>();

public void AddNumber(int newNumber)
{
    favorites.Add(newNumber);
}

public void RandomButton()
{
    if (DataController.Instance.group == 3)
    {
            randomNumber = favorites[UnityEngine.Random.Range(0, favorites.Count)];
            Debug.Log(randomNumber);
    }
}
person derHugo    schedule 28.06.2020
comment
Я думаю, он хочет var number = favorites[rnd.Next(0, favorites.Length)];... - person Gusman; 29.06.2020
comment
В основном это то, что делает Random.Range(0, favorites.Count) (или Length для массива)... - person derHugo; 29.06.2020
comment
Next верхний предел эксклюзивный, не включительно. - person Gusman; 29.06.2020
comment
То же самое для Random.Range при использовании с int аргументами: Return a random integer number between min [inclusive] and max [exclusive] (Read Only). - person derHugo; 29.06.2020
comment
Спасибо! Ваш комментарий очень полезен, но я хотел бы сгенерировать случайное число из этого массива. b0 - добавить номер 0 в позицию 0, а b1 добавить номер 1 в позицию 1, поэтому избранное[0,1] и т.д.. и из этого избранного[] сгенерировать случайное число 0 или 1 или т.д. - person Xerodus; 29.06.2020
comment
@Xerodus хорошо, в настоящее время вы устанавливаете элементы все на 0 в b0 и все элементы на 1 в b1 ... какой смысл будет перебирать массив, если в любом случае только установка одной конкретной записи на определенное значение? - person derHugo; 29.06.2020
comment
Я новичок :D должен ли я использовать вместо public void b0() { for (runs = 0; runs < favorites.Length; runs++) { favorites[runs] = 0; } } простое избранное[0] = 0; - person Xerodus; 29.06.2020
comment
@Xerodus хорошо зависит от того, что вы хотите там сделать, но да, в основном это будет вести себя одинаково ... все еще не уверен, чего вы пытаетесь достичь здесь - person derHugo; 29.06.2020

if (DataController.Instance.group == 3)
{
        var randomIndex = UnityEngine.Random.Range(0, favorites.Length);
        Console.WriteLine(favorites[randomIndex]); // random item from your array
}

ответ

person Roman Epifanov    schedule 28.06.2020