我有一个49空间一维数组声明为int boardArray [49];
我还有一个二维7x7数组声明为int boardArrayTwo [7][7]'
我试图使用嵌套for循环将一维数组投入到这里的二维数组是我用来测试它的代码。
for (int i = 0; i > 50; ++i)
{
boardArray[i] = i; //fills the array with ints 0 - 48 to test
}
for (int x = 0; x >= 7; ++x)
{
for (int k = 0; k >= 7; ++k)
{
for (int n = 0; n >= 49; ++n)
{
boardArrayTwo[x][k] = boardArray[n];
cout << boardArrayTwo[x][k] << " " << endl;
}
}
}
我尝试过这个,但没有任何反应。我做错了吗?
答案 0 :(得分:6)
for (int x = 0; x >= 7; ++x)
{
for (int k = 0; k >= 7; ++k){
for (int n = 0; n >= 49; ++n)
{
这是错的。 x和k应该是&lt; 7(不应使用第三个周期):
for (int x = 0; x < 7; ++x)
{
for (int k = 0; k < 7; ++k){
boardArrayTwo[x][k] = boardArray[7*x + k];
编辑:
像@Fabio一样Ceconello在他的评论中让我注意到,即使第一个循环是错误的,因为反转条件检查,它应该这样修改:for (int i = 0; i < 49; ++i)
{
boardArray[i] = i; //fills the array with ints 0 - 48 to test
}
答案 1 :(得分:5)
除了循环中的反转逻辑(其他人提到),不需要第三个内循环。只需将归因放在第二个内循环中:
boardArrayTwo[x][k] = boardArray[x * 7 + k];
编辑: 我还应该提到所有这些文字都不是好的做法,我在上面添加了一个(7)。我按如下方式重写代码:
#define arrlen(x) (sizeof(x)/sizeof((x)[0]))
for (int i = 0; i < arrlen(boardArray); ++i)
{
boardArray[i] = i;
}
int stride = arrlen(boardArrayTwo[0]);
for (int x = 0; x < arrlen(boardArrayTwo); ++x)
{
for (int k = 0; k < stride; ++k)
{
boardArrayTwo[x][k] = boardArray[stride * x + k];
cout << boardArrayTwo[x][k] << " " << endl;
}
}
警告:如果未在此处声明数组(作为参数传递),则arrlen()将无法工作。但这是另一个长篇故事...
答案 2 :(得分:5)
您的目标数组看起来像行主要顺序。您可以将源阵列直接爆炸到位。
memcpy(boardArrayTwo, boardArray, 49 * sizeof(int));
或者如果你更喜欢更惯用的C ++中的东西:
std::copy(boardArray, boardArray + 49, reinterpret_cast<int*>(boardArrayTwo));
答案 3 :(得分:4)
您在for循环中使用了i > 50
。对于所有其他循环,它应该是i < 49
并且相同。
此外,这不起作用。您将所有boardArrayTwo[][]
值设置为boardArray[49]
您应该执行以下操作:
for (int x = 0; x < 7; ++x)
{
for (int k = 0; k < 7; ++k)
{
boardArrayTwo[x][k] = boardArray[7*x + k];
cout << boardArrayTwo[x][k] << " " << endl;
}
}
或
int count = 0;
for (int x = 0; x < 7; ++x)
{
for (int k = 0; k < 7; ++k)
{
boardArrayTwo[x][k] = boardArray[count];
cout << boardArrayTwo[x][k] << " " << endl;
count++;
}
}
答案 4 :(得分:1)
首先,for
循环中的第二个术语表示for循环将在该条件为真时运行。因此,对于所有循环,您应该使用<
而不是>=
。
其次,n
上的循环是额外的,不应该存在。您需要的是浏览x
和k
,然后将相应的元素从boardArray
复制到boardArrayTwo
。
您可以执行以下操作之一:
int n = 0;
for (int x = 0; x < 7; ++x)
for (int k = 0; k < 7; ++k)
{
boardArrayTwo[x][k] = boardArray[n];
++n;
}
或使用公式计算正确的n
:
for (int x = 0; x < 7; ++x)
for (int k = 0; k < 7; ++k)
boardArrayTwo[x][k] = boardArray[x*7+k];
我写了x*7+k
,因为似乎x
遍历数组的行,每行有7个元素,表示boardArray的x*7+k
元素表示位置{{ 1}} of boardArrayTwo /
答案 5 :(得分:0)
请注意
for (int i = 0; i > 50; ++i)
如果i
初始化为0,则不会大于50
,因此它永远不会进入循环。
答案 6 :(得分:0)
在每个循环中,您使用大于或等于(&gt;)而不是小于(&lt;)或等于。您还应该注意到,正如Fabio指出的那样,第三个嵌套循环将boardArrayTwo[x][k]
一遍又一遍地设置为0-49,共49次。您将需要使用算术来操作x和k,以便它们将成为boardArray的索引,然后将该索引分配给boardArrayTwo[x][k]
。
使用0..7(包括0和7)也很重要,实际上是8个位置。你的数组只有7长,所以你实际上最终得到了一些垃圾值。
#include <iostream>
using std::cout;
using std::endl;
int main () {
int boardArray[49];
int boardArrayTwo[7][7];
for (int i = 0; i < 50; ++i)
{
boardArray[i] = i; //fills the array with ints 0 - 48 to test
}
for (int x = 0; x < 7; ++x)
{
for (int k = 0; k < 7; ++k)
{
boardArrayTwo[x][k] = boardArray[x*7 + k];
cout << boardArrayTwo[x][k] << " " << endl;
}
}
}
运气好的话(除非我自己很尴尬),这应该可以解决问题!
编辑:特别感谢Fabio!答案 7 :(得分:0)
for(int i=0; i<49; i++)
b[i]=(i+1);
int p=0;
for(int i=0;i<7;i++){
for(int j=0;j<7;j++)
{a[i][j]=b[p];
p++;}
}
除了其他错误,第三个循环使您的代码错误