背景:我是编程的初学者。这就是我迄今为止在生命游戏的草稿中所拥有的:
#include <iostream>
using namespace std;
int main()
{
//INTRODUCTION
int arraySize;
cout << "What is the length of your square-shaped grid? Enter an integer value greater than 0. Too big will cause problems.";
cin >> arraySize;
int original[arraySize][arraySize];
//REQUESTS INPUT FOR ARRAY
for (int n = 0; n < arraySize; n++)
{
for (int x = 0; x < arraySize; x++)
{
bool ValInput;
cout << "\n" << n << "," << x << "...";
cin >> ValInput;
original[n][x] = ValInput;
}
}
cout << "\n\n\n";
//DISPLAYS ARRAY
for (int row = 0; row < arraySize; row++)
{
for (int column = 0; column < arraySize; column++)
{
cout << original[row][column] << " ";
if (column == arraySize - 1)
{
cout << "\n";
}
}
}
cout << "Next frame.\n\n";
//FORMS NEXT FRAME WITH VALUES OF # OF LIVE NEIGHBORS
int liveNeighbors = 0;
for (int z = 0; z < arraySize; z++)
{
for (int h = 0; h < arraySize; h++)
{
liveNeighbors = 0;
if (z - 1 > -1)
liveNeighbors += original[z - 1][h];
if (z + 1 < arraySize)
liveNeighbors += original[z + 1][h];
if (h - 1 > -1)
liveNeighbors += original[z][h - 1];
if (h + 1 < arraySize)
liveNeighbors += original[z][h + 1];
if (z - 1 > -1, h - 1 > -1)
liveNeighbors += original[z - 1][h -1];
if (z - 1 > -1, h + 1 < arraySize)
liveNeighbors += original[z - 1][h + 1];
if (z + 1 < arraySize, h - 1 > -1)
liveNeighbors += original[z + 1][h - 1];
if (z + 1 < arraySize, h + 1 < arraySize)
{
liveNeighbors += original[z + 1][h + 1];
}
cout << liveNeighbors << " ";
}
}
}
问题出现在我到目前为止的最后一步中(显示每个单元格有多少活的邻居。
示例:如果4x4网格的样本输入为“4”,然后输入各种1和0,则liveNeighbors值不实际。它可能是数百,最大值应该只有8。
如果你能帮助我找到问题的解决方案,那就太好了。但是,请记住我是新手。
谢谢:)
答案 0 :(得分:5)
你的一些条件是错误的:
if (z - 1 > -1, h - 1 > -1) /* ... */
if (z - 1 > -1, h + 1 < arraySize) /* ... */
if (z + 1 < arraySize, h - 1 > -1) /* ... */
if (z + 1 < arraySize, h + 1 < arraySize) /* ... */
逗号没有达到您的预期,您需要的可能是逻辑'和',在C ++中是运算符&&
:
if ((z - 1 > -1) && (h - 1 > -1)) /* ... */
if ((z - 1 > -1) && (h + 1 < arraySize)) /* ... */
if ((z + 1 < arraySize) && (h - 1 > -1)) /* ... */
if ((z + 1 < arraySize) && (h + 1 < arraySize)) /* ... */
仅为了可读性添加了额外括号,它们不是必需的。
您知道,这是逗号运算符的标准定义:
用逗号分隔的一对表达式从左到右评估,左表达式的值是 丢弃强>
在您的情况下,逗号左侧的比较基本上没有在if
条件中扮演任何角色。
答案 1 :(得分:1)
我认为您的问题出在此代码中:
if (z - 1 > -1, h - 1 > -1)
你的直觉在这里是完全正确的,但你在代码中写这个的方式并不意味着你想要的。在C ++中,逗号运算符是一个深奥的运算符,意思是“做两件事,但丢弃第一个操作的结果。”。在这种情况下,这意味着“检查是否z - 1> -1,然后完全丢弃该结果,然后查看是否h - 1> -1,”这根本不是你想要的。要检查并确定这两个条件是否成立,请使用&amp;&amp ;;操作者:
if (z - 1 > -1 && h - 1 > -1)
这应该有助于修复你的错误。
希望这有帮助!