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;
我正在使用 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;