Самый простой способ будет эта маленькая for
петля:
int questionNumberArray[] = {0,1,2,3,4,5,6,7,8,9};
const size_t n = sizeof(questionNumberArray)/sizeof(questionNumberArray[0]);
for (size_t i = 0; i < n - 1; i++)
{
size_t j = random(0, n - i);
int t = questionNumberArray[i];
questionNumberArray[i] = questionNumberArray[j];
questionNumberArray[j] = t;
}
Давайте разберем его построчно, мы должны?
int questionNumberArray[] = {0,1,2,3,4,5,6,7,8,9};
Вам не нужно класть количество ячеек, если вы инициализируете такой массив. Просто оставьте скобки пустыми, как я.
const size_t n = sizeof(questionNumberArray)/sizeof(questionNumberArray[0]);
Я решил сохранить количество ячеек в n
постоянной. Оператор sizeof
дает вам количество байтов, полученных вашим массивом, и количество байтов, взятых одной ячейкой. Вы делите первое число на второе, и у вас есть размер вашего массива.
for (size_t i = 0; i < n - 1; i++)
Пожалуйста, обратите внимание, что диапазон петли n - 1
. Мы не хотим, чтобы i
имел значение последнего индекса.
size_t j = random(0, n - i);
Мы объявляем переменную j
, что указывает на какой-то случайной ячейке с индексом больше i
. Вот почему мы никогда не хотели i
иметь значение n - 1
- потому что тогда j
был бы не связан. Мы получаем случайное число с random
функции Arduino в: https://www.arduino.cc/en/Reference/Random
int t = questionNumberArray[i];
questionNumberArray[i] = questionNumberArray[j];
questionNumberArray[j] = t;
Простой обмен двух значений. Это можно сделать без временной переменной t
, но тогда код становится менее читаемым.
В моем случае результат был следующим:
questionNumberArray[0] = 0
questionNumberArray[1] = 9
questionNumberArray[2] = 7
questionNumberArray[3] = 4
questionNumberArray[4] = 6
questionNumberArray[5] = 5
questionNumberArray[6] = 1
questionNumberArray[7] = 8
questionNumberArray[8] = 2
questionNumberArray[9] = 3
Пытались ли вы Google «в случайном порядке массив»? – TDG
http://forum.arduino.cc/index.php?topic=43424.0 –
Я сделал, эти ответы работают только для двоичных массивов, потому что значения могут повторяться, как я пытался объяснить в моем вопросе. – murloc