如何将来自 2 个不同数组的数字组合成一个数组?
How to combine numbers from 2 different arrays into just one array?
我有一个代码,我在其中生成随机数的列数 = numCols 和随机数的行数 = numRows。 nomRows 和 numCols 的倍数 = numCells。我想用不同的颜色为每个单元格着色,我知道我拥有的单元格总数,因为那是 numCells。因此我有一个数组 "colors",它有 6 个值。该数组中的每个数字代表我在该数组中使用该颜色的次数。我有一个循环,它为每种颜色生成一个随机数,但始终确保数组中的数字总数永远不会大于 NumCells。您不能总共有 23 个颜色值,而只有 10 个单元格适合它。现在这工作正常,数组中的总数永远不会大于 numCells。
所以我有一个包含 6 个数字的数组 colors[],我想将该数组推入 mysound2[],在我推入它之后创建另一个循环,它将在该数组中再添加 2 个数字以结束一个数组 mysound2[],其中包含 8 个数字的总数。
但我无法让它工作,或者我得到一个错误:数组下标的类型无效 'int [8][int [6]]' 我猜 arduino 对 8 个数组不满意我只是想添加 6 个数字.
或者,如果我尝试其他操作,代码会生成 0,0,0。
请问如何将 colors[] 推入 mysoun2[] 并再添加 2 个随机数?
// CODE FOR COLORS
``` int AnalogPin0 = A0; //Declare an integer variable, hooked up to analog pin 0
``` int AnalogPin1 = A1; //Declare an integer variable, hooked up to analog pin 1
void setup() {
Serial.begin(9600); //Begin Serial Communication with a baud rate of 9600
randomSeed(analogRead(0));
}
void loop() {
// 1)Gray, 2)White, 3)Yellow, 4)Blue, 5)Black, 6)Red
int numCols1 = random(1,4);
int numCols2 = random(2,5);
int numCols = numCols1 + numCols2;
int numRows1 = random(2,5);
int numRows2 = random(2,6);
int numRows = numRows1 + numRows2;
int numCells = numCols * numRows;
int colors[] = {5,3,2,1,0,0};
int numAlloc = colors[0] + colors[1] + colors[2] + colors[3] + colors[4] + colors[5];
for (int i=0; i<numCells - numAlloc; i++)
{
int color = random(0,7);
color[colors]++;
}
/*The Serial.print() function does not execute a "return" or a space
Also, the "," character is essential for parsing the values,
The comma is not necessary after the last variable.*/
Serial.print(colors [0]);
Serial.print(",");
Serial.print(numCols);
Serial.print(",");
Serial.print(numRows);
Serial.print(",");
//Serial.print(numCells);
//Serial.print(",");
Serial.println();
delay(5000); // For illustration purposes only. This will slow down your program if not removed
}
//CODE FOR ADDING 8 NUMBERS INTO ONE ARRAY WITH 2 LOOPS
# define Parameters 8
int mysound2[Parameters];
int randNumber =0;
void setup() {
Serial.begin(9600);
randomSeed(analogRead(0));
for (int thisPin = 0; thisPin < Parameters-2; thisPin++) {
randNumber = random(1, 100); // generates between 0 and 127
mysound2[thisPin]= randNumber;
}
for (int thisPin = Parameters-2; thisPin < Parameters; thisPin++) {
randNumber = random(100, 200); // generates between 0 and 127
mysound2[thisPin]= randNumber;
}
}
void loop() {
for (int thisPin = 0; thisPin < Parameters; thisPin++) {
Serial.println(mysound2[thisPin]);
delay(5000);
}
}
//ME TRYING TO COMBINE THE TWO CODES
// 1)Gray, 2)White, 3)Yellow, 4)Blue, 5)Black, 6)Red
# define Parameters 8
int numCols1 = random(1,4);
int numCols2 = random(2,5);
int numCols = numCols1 + numCols2;
int numRows1 = random(2,5);
int numRows2 = random(2,6);
int numRows = numRows1 + numRows2;
int numCells = numCols * numRows;
int colors[] = {5,3,2,1,0,0};
int numAlloc = colors[0] + colors[1] + colors[2] + colors[3] + colors[4] + colors[5];
int color = 0;
int mysound1[Parameters];
int randNumber1 =0;
void setup() {
Serial.begin(9600);
randomSeed(analogRead(0));
for (int thisPin = 0; thisPin < Parameters-2; thisPin++)
{
for (int i=0; i<numCells - numAlloc; i++)
{
int color = random(0,6);
color[colors]++;
}
mysound1[color];
}
for (int thisPin = Parameters-2; thisPin < Parameters; thisPin++) {
randNumber1 = random(100, 200); // generates between 0 and 127
mysound1[thisPin]= randNumber1;
}
}
void loop() {
for (int thisPin = 0; thisPin < Parameters; thisPin++) {
Serial.println(mysound1[color]);
delay(2000);
}
}
我了解到您想将一个数组复制到另一个数组中。你可以用这样的函数来做到这一点:
void copyArray(int* source, int* destination, int length) {
for (int i = 0; i < length; i++) {
*destination++ = *source++;
}
}
因此,如果您想将 colors
中的 6 个元素复制到 mysound2
中,
copyArray(colors, mysound2, 6);
会做的。
如果您想再添加 2 个元素,只需执行以下操作即可。
mysound2[6] = randNumber1;
mysound2[7] = randNumber2;
编辑: 在评论部分,您提到要将两个数组合二为一。像这样的函数可以做到这一点。
void copyArray(int* source, int* destination, int destStartIndex, int len) {
for (int i = 0; i < len; i++) {
destination[destStartIndex + i] = *source++;
}
}
下面的代码会将colors
复制到mysound2
的前6个字节,并将thisPin
复制到mysound2
的后2个字节。
copyArray(colors, mysound2, 0, 6);
copyArray(thisPin, mysound2, 6, 2);
我有一个代码,我在其中生成随机数的列数 = numCols 和随机数的行数 = numRows。 nomRows 和 numCols 的倍数 = numCells。我想用不同的颜色为每个单元格着色,我知道我拥有的单元格总数,因为那是 numCells。因此我有一个数组 "colors",它有 6 个值。该数组中的每个数字代表我在该数组中使用该颜色的次数。我有一个循环,它为每种颜色生成一个随机数,但始终确保数组中的数字总数永远不会大于 NumCells。您不能总共有 23 个颜色值,而只有 10 个单元格适合它。现在这工作正常,数组中的总数永远不会大于 numCells。
所以我有一个包含 6 个数字的数组 colors[],我想将该数组推入 mysound2[],在我推入它之后创建另一个循环,它将在该数组中再添加 2 个数字以结束一个数组 mysound2[],其中包含 8 个数字的总数。
但我无法让它工作,或者我得到一个错误:数组下标的类型无效 'int [8][int [6]]' 我猜 arduino 对 8 个数组不满意我只是想添加 6 个数字.
或者,如果我尝试其他操作,代码会生成 0,0,0。
请问如何将 colors[] 推入 mysoun2[] 并再添加 2 个随机数?
// CODE FOR COLORS
``` int AnalogPin0 = A0; //Declare an integer variable, hooked up to analog pin 0
``` int AnalogPin1 = A1; //Declare an integer variable, hooked up to analog pin 1
void setup() {
Serial.begin(9600); //Begin Serial Communication with a baud rate of 9600
randomSeed(analogRead(0));
}
void loop() {
// 1)Gray, 2)White, 3)Yellow, 4)Blue, 5)Black, 6)Red
int numCols1 = random(1,4);
int numCols2 = random(2,5);
int numCols = numCols1 + numCols2;
int numRows1 = random(2,5);
int numRows2 = random(2,6);
int numRows = numRows1 + numRows2;
int numCells = numCols * numRows;
int colors[] = {5,3,2,1,0,0};
int numAlloc = colors[0] + colors[1] + colors[2] + colors[3] + colors[4] + colors[5];
for (int i=0; i<numCells - numAlloc; i++)
{
int color = random(0,7);
color[colors]++;
}
/*The Serial.print() function does not execute a "return" or a space
Also, the "," character is essential for parsing the values,
The comma is not necessary after the last variable.*/
Serial.print(colors [0]);
Serial.print(",");
Serial.print(numCols);
Serial.print(",");
Serial.print(numRows);
Serial.print(",");
//Serial.print(numCells);
//Serial.print(",");
Serial.println();
delay(5000); // For illustration purposes only. This will slow down your program if not removed
}
//CODE FOR ADDING 8 NUMBERS INTO ONE ARRAY WITH 2 LOOPS
# define Parameters 8
int mysound2[Parameters];
int randNumber =0;
void setup() {
Serial.begin(9600);
randomSeed(analogRead(0));
for (int thisPin = 0; thisPin < Parameters-2; thisPin++) {
randNumber = random(1, 100); // generates between 0 and 127
mysound2[thisPin]= randNumber;
}
for (int thisPin = Parameters-2; thisPin < Parameters; thisPin++) {
randNumber = random(100, 200); // generates between 0 and 127
mysound2[thisPin]= randNumber;
}
}
void loop() {
for (int thisPin = 0; thisPin < Parameters; thisPin++) {
Serial.println(mysound2[thisPin]);
delay(5000);
}
}
//ME TRYING TO COMBINE THE TWO CODES
// 1)Gray, 2)White, 3)Yellow, 4)Blue, 5)Black, 6)Red
# define Parameters 8
int numCols1 = random(1,4);
int numCols2 = random(2,5);
int numCols = numCols1 + numCols2;
int numRows1 = random(2,5);
int numRows2 = random(2,6);
int numRows = numRows1 + numRows2;
int numCells = numCols * numRows;
int colors[] = {5,3,2,1,0,0};
int numAlloc = colors[0] + colors[1] + colors[2] + colors[3] + colors[4] + colors[5];
int color = 0;
int mysound1[Parameters];
int randNumber1 =0;
void setup() {
Serial.begin(9600);
randomSeed(analogRead(0));
for (int thisPin = 0; thisPin < Parameters-2; thisPin++)
{
for (int i=0; i<numCells - numAlloc; i++)
{
int color = random(0,6);
color[colors]++;
}
mysound1[color];
}
for (int thisPin = Parameters-2; thisPin < Parameters; thisPin++) {
randNumber1 = random(100, 200); // generates between 0 and 127
mysound1[thisPin]= randNumber1;
}
}
void loop() {
for (int thisPin = 0; thisPin < Parameters; thisPin++) {
Serial.println(mysound1[color]);
delay(2000);
}
}
我了解到您想将一个数组复制到另一个数组中。你可以用这样的函数来做到这一点:
void copyArray(int* source, int* destination, int length) {
for (int i = 0; i < length; i++) {
*destination++ = *source++;
}
}
因此,如果您想将 colors
中的 6 个元素复制到 mysound2
中,
copyArray(colors, mysound2, 6);
会做的。
如果您想再添加 2 个元素,只需执行以下操作即可。
mysound2[6] = randNumber1;
mysound2[7] = randNumber2;
编辑: 在评论部分,您提到要将两个数组合二为一。像这样的函数可以做到这一点。
void copyArray(int* source, int* destination, int destStartIndex, int len) {
for (int i = 0; i < len; i++) {
destination[destStartIndex + i] = *source++;
}
}
下面的代码会将colors
复制到mysound2
的前6个字节,并将thisPin
复制到mysound2
的后2个字节。
copyArray(colors, mysound2, 0, 6);
copyArray(thisPin, mysound2, 6, 2);