Arduino语言随机排列数组顺序

Arduino language shuffle order of an array

我正在使用 arduino,但我似乎无法随机排列数组。 问题是使用 arduino 我不能使用 arraylist 所以帽子让我很难打乱数组。

我真正想要的是一个从 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]);
   }

  }


  }

我对此进行了测试,它应该可以工作。我只是在函数中使用了 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 

编辑:如果您想多次随机化列表,我建议您将 randomSeed 函数从函数移动到 setup 函数。这样您就可以随时调用 randomizeList

还有一件事:如果您希望列表的值是 [1,52] 而不是 [0,51],您只需将行 numbers[index] = r; 编辑为 numbers[index] = r + 1;