C++ 康威博弈错误与二维数组操作
所以我正在研究,到目前为止我已经提出了这个,我不确定我是否在正确的轨道上。基本上我有一个函数输出随机值来测试我的代码。但似乎什么也没发生。我怀疑我的问题在于以下代码C++ 康威博弈错误与二维数组操作,c++,C++,所以我正在研究,到目前为止我已经提出了这个,我不确定我是否在正确的轨道上。基本上我有一个函数输出随机值来测试我的代码。但似乎什么也没发生。我怀疑我的问题在于以下代码 int sum = 0; for (int k = (i - 1); k <= (i + 1); k++) { for (int l = (j - 1); l <= (j + 1); l++) { sum += currentGen[k][l]; }
int sum = 0;
for (int k = (i - 1); k <= (i + 1); k++) {
for (int l = (j - 1); l <= (j + 1); l++) {
sum += currentGen[k][l];
}
}
return sum;
我根据您发布的代码提供此答案。你真的应该考虑把那个代码添加到你原来的问题中,这样在StAccess上找到的人会有完整的上下文。 如果单元格满足
RANDOM
阈值,则您的randomcell
函数仅将单元格设置为1。否则不会将其清除为0。一旦你修好了,一切都会好起来的。即
void RandomCells(int currentGen[][CELLY]) {
for (int i = 0; i < CELLX; i++) {
for (int j = 0; j < CELLY; j++) {
if (rand() % 100 + 1 < RANDOM) {
currentGen[i][j] = 1;
} else
{
currentGen[i][j] = 0;
}
}
}
}
显然,这些细胞中的大多数是非零的,因此康威的生命算法会在下一代将它们映射为0,因为“拥挤”
用这种“随机”值填充currentGen的原因是它作为一个自动变量分配给了main
。自动变量不会初始化为任何特定值。您需要自己初始化它们。您可以通过修改您的算法(正如我上面所做的),或者通过添加显式代码来初始化结构来实现这一点
<>这与文件范围变量不同,如果C和C++没有初始化器或默认构造函数,则它们定义为程序启动时初始化为零。(学究们会指出,即使这样也有警告。)
一旦您进行了必要的修复,要真正了解康威的生活,您需要将
CELLX
和CELLY
设置为更大的值…此循环的输入是什么?也就是说,您正在扫描以创建的上一代是否为currentGen?大概有一对环围绕着这两个。。。你能展示整个函数吗?我创建了一个函数RandomCells
来添加1。在这里,你还应该检查i-1、i+1、j-1、j+1是否在你的2D数组的范围内。你没有输出和值。在得到Conway函数的处理后,您将输出数组值。我建议您使用调试器来检查总和值。
void RandomCells(int currentGen[][CELLY]) {
for (int i = 0; i < CELLX; i++) {
for (int j = 0; j < CELLY; j++) {
if (rand() % 100 + 1 < RANDOM) {
currentGen[i][j] = 1;
} else
{
currentGen[i][j] = 0;
}
}
}
}
0 0 4196155 1
1813657216 1 4197653 0
-870503576 1 4197584 1