Java 我的新条件逻辑适用于生命游戏规则吗?(区分出生和生活条件)

Java 我的新条件逻辑适用于生命游戏规则吗?(区分出生和生活条件),java,arrays,conditional,conways-game-of-life,Java,Arrays,Conditional,Conways Game Of Life,我之前曾在这里寻求帮助查看我的人生游戏代码:并收到反馈(除了我的最后一个问题,它构成了这个问题的基础),但我不确定如何发布一个更新的问题,我的代码格式正确的回答 这里是我的更新代码,仅适用于生活游戏的规则。我试图把我需要区分出生和生活条件的建议考虑进去。但它仍然不起作用,甚至比以前做得更少(现在它在第一代之后空白,而不是产生废话)。如果有人能检查一下,告诉我我的逻辑是否正确,这将非常有帮助,因为考虑到以下格式,它似乎应该可以工作: if ((map = true) && ((co

我之前曾在这里寻求帮助查看我的人生游戏代码:并收到反馈(除了我的最后一个问题,它构成了这个问题的基础),但我不确定如何发布一个更新的问题,我的代码格式正确的回答

这里是我的更新代码,仅适用于生活游戏的规则。我试图把我需要区分出生和生活条件的建议考虑进去。但它仍然不起作用,甚至比以前做得更少(现在它在第一代之后空白,而不是产生废话)。如果有人能检查一下,告诉我我的逻辑是否正确,这将非常有帮助,因为考虑到以下格式,它似乎应该可以工作:

if ((map = true) && ((count == 2) || (count == 3))){
map2 = true;} else {map2 = false;}

if (map = false) && count == 3)
map2 = true; 
.
.
.
update map = map2;
代码:

for (int j = 0; j < y; j++) {
      for (int i = 0; i < x; i++) {
        if ((map[j][i] = true) && ((neighborCount[j][i] == 2) || (neighborCount[j][i] == 3))){//alive/dead
          map2[j][i] = true;
        } else {map2[j][i] = false;
        }

        if ((map[j][i] = false) && (neighborCount[j][i] == 3)){//birth
          map2[j][i] = true;
        }
        }
    } 

    map = map2;
  }
for(int j=0;j
可能需要更多的括号:

if ((map[j][i] = true) && ((neighborCount[j][i] == 2) || (neighborCount[j][i] == 3)))

可能需要更多的括号:

if ((map[j][i] = true) && ((neighborCount[j][i] == 2) || (neighborCount[j][i] == 3)))

看看这种情况:

if ((map[j][i] = true) && ... ) {
注意,你正在写作

(map[j][i] = true)
这意味着“将
map[j][i]
设置为true,然后求值为
true
”。换句话说,这会更改
map[j][i]
(oops!)的内容,然后继续执行if语句的其余部分

我相信你的意思是写这样的东西

if ((map[j][i] == true) && ... ) {
或者,甚至更好

if (map[j][i] && ... ) {
这意味着同样的事情,也不会冒意外任务的风险

同样,这里你写

if ((map[j][i] = false) && ...
这将
map[j][i]
更新为false(oops!)。我想你是说

if ((map[j][i] == false) && ...
或者,更好的是

if (!map[j][i] && ...

值得注意的是,许多编译器在看到与您编写的代码类似的代码时会发出警告,因为这样做几乎总是错误的。您可能需要检查是否有此类警告。如果是这样,现在你知道那意味着什么了!如果没有,您可能希望提高编译器的警告级别,这样以后就不太可能犯类似的错误。

看看这种情况:

if ((map[j][i] = true) && ... ) {
注意,你正在写作

(map[j][i] = true)
这意味着“将
map[j][i]
设置为true,然后求值为
true
”。换句话说,这会更改
map[j][i]
(oops!)的内容,然后继续执行if语句的其余部分

我相信你的意思是写这样的东西

if ((map[j][i] == true) && ... ) {
或者,甚至更好

if (map[j][i] && ... ) {
这意味着同样的事情,也不会冒意外任务的风险

同样,这里你写

if ((map[j][i] = false) && ...
这将
map[j][i]
更新为false(oops!)。我想你是说

if ((map[j][i] == false) && ...
或者,更好的是

if (!map[j][i] && ...

值得注意的是,许多编译器在看到与您编写的代码类似的代码时会发出警告,因为这样做几乎总是错误的。您可能需要检查是否有此类警告。如果是这样,现在你知道那意味着什么了!如果没有,您可能希望提高编译器的警告级别,这样以后就不太可能犯这样的错误。

通过使用调试器运行代码,您可能会获得比这里更有用的信息。通过这种方式,您可以测试代码,并准确地看到它在哪里没有按预期正常工作。至少,它可以帮助您隔离错误,如果您仍然被卡住,这将允许您提出更好的问题,并创建和发布有效的错误。另一个技巧:努力使您的类更小,使其成为可单独测试的代码单元。这将使调试更加容易。始终记住“单一责任规则”,其中每个类都有一个且只有一个责任。提示:将
map[i][j]=true
替换为
map[i][j]==true
,或者最好仅替换为
map[i][j]
。您的编译器是否发出了“可能不正确的赋值…”之类的警告?通过使用调试器运行代码,您可能会获得比此处更有用的信息。通过这种方式,您可以测试代码,并准确地看到它在哪里没有按预期正常工作。至少,它可以帮助您隔离错误,如果您仍然被卡住,这将允许您提出更好的问题,并创建和发布有效的错误。另一个技巧:努力使您的类更小,使其成为可单独测试的代码单元。这将使调试更加容易。始终记住“单一责任规则”,其中每个类都有一个且只有一个责任。提示:将
map[i][j]=true
替换为
map[i][j]==true
,或者最好仅替换为
map[i][j]
。您的编译器是否发出了“可能不正确的赋值…”之类的警告<代码>(false&(true | | true))->false。还是我错了?你是对的。更新。不幸的是,这仍然不能解决问题。它似乎并不正确。neighborCount[j][i]获取countNeighbors(int i,int j,map),这是一种采用两个int和一个布尔数组“map”的方法,它引用并计算3x3数组中中间元素周围的8个元素。)@Cosmonlan:虽然Opsse的答案没有解决您的整体问题,但它确实修复了代码中的一个错误,所以至少你应该投票支持这个答案。关于这方面的更多信息,请检查:我没有投票支持Opsse的答案。我没有15分的声望,所以它只是说“谢谢你的反馈”,然后又回复了。
(false&&true | | true)->true
!=<代码>(false&(true | | true))->false。还是我错了?你是对的。更新。不幸的是,这仍然不能解决问题。它似乎并不正确。neighborCount[j][i]获取countNeighbors(int i,int j,map),这是一种方法,它接受两个int和一个布尔数组“map”,并引用和计算3x3数组中中间元素周围的8个元素。)@Cos