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