2015-10-08 1 views
0

Я работаю с arduino, но я не могу перетасовать массив. proplem - это то, что с arduino я не могу использовать arraylist, поэтому шляпа очень затрудняет перемещение массива.Arduino language shuffle order of array

Что я на самом деле хочу, это список чисел от 0 до 52, перетасованный. поэтому каждый раз, когда я запускаю программу она перемешивается в другом порядке с номерами от 0 до 52

Вот мой код:

const int MAXNUMMER = 52; 
int numbers[52]; 



int temp = numbers[first]; 
//int numbers[first] = numbers[second]; 
//int numbers[second] = temp; 




void setup() { 
// put your setup code here, to run once: 
Serial.begin(9600); 

    randomizeList(); 
} 

void loop() { 
// put your main code here, to run repeatedly: 

} 


void randomizeList() 
{ 

randomSeed(analogRead(A0)); 
int r = random(53); 


for(int i =0; i < MAXNUMMER; i++) 
{ 
    if(numbers[i] != r) 

    { 
    numbers[i] = r; 

    Serial.println(numbers[i]); 
    } 

    } 


    } 
+0

И ваша проблема ... что, в точку? – paxdiablo

+0

Что я на самом деле хочу, это список чисел от 0 до 52, перетасованный. поэтому каждый раз, когда я запускаю программу, она перетасовывается в другом порядке с номерами от 0 до 52 –

ответ

0

Я испытал это, и он должен работать. Я просто использовал Serial.print в функции, потому что я хотел бы видеть все в конце;)

const int NUMOFNUMBERS = 52; 
int numbers[NUMOFNUMBERS]; 

void setup() { 
    // put your setup code here, to run once: 
    Serial.begin(9600); 

    randomizeList(); 
} 

void loop() { 
// put your main code here, to run repeatedly: 

} 

void randomizeList() 
{ 
    unsigned char chosen[NUMOFNUMBERS]; 
    unsigned char index, i2; 

    for (index = 0; index < NUMOFNUMBERS; index++) 
    chosen[index] = 0; 

    randomSeed(analogRead(A0)); 

    for (index = 0; index < NUMOFNUMBERS; index++) 
    { 
    int r = random(NUMOFNUMBERS-index); 
    for (i2 = 0; i2 <= r; i2++) 
    { 
     r += chosen[i2]; 
    } 
    chosen[r] = 1; 
    numbers[index] = r; 
    Serial.print(numbers[index]); 
    Serial.print(" "); 
    } 
    Serial.println(""); 
} 

Я изменил имя переменной из MAXNUMMER в NUMOFNUMBERS потому, что это количество чисел, которые будут созданы (т.е. максимальное число будет NUMOFNUMBERS - 1

Это пример выполнения этой программы в течение 6 раз устанавливающих NUMOFNUMBERS до 5:

4 1 3 2 0 
2 3 4 0 1 
1 0 2 4 3 
0 4 1 3 2 
3 0 4 2 1 
4 3 2 1 0 

EDIT: Если вы хотите рандомизации перечислите более одного раза, я предлагаю вам переместить функцию randomSeed из функции в функцию setup. Таким образом, вы сможете звонить randomizeList каждый раз, когда захотите. более

одно: если вы предпочитаете, чтобы иметь список со значениями [1,52] вместо [0,51], вы можете просто изменить строку numbers[index] = r; в numbers[index] = r + 1;