2015-09-05 2 views
2

У меня есть проблема с Шаркая этот массив с программным обеспечением Arduino:Перемешать массив в программном обеспечении Arduino

int questionNumberArray[10]={0,1,2,3,4,5,6,7,8,9}; 

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

+0

Пытались ли вы Google «в случайном порядке массив»? – TDG

+0

http://forum.arduino.cc/index.php?topic=43424.0 –

+0

Я сделал, эти ответы работают только для двоичных массивов, потому что значения могут повторяться, как я пытался объяснить в моем вопросе. – murloc

ответ

2

Самый простой способ будет эта маленькая 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 
Смежные вопросы