gpt4 book ai didi

c - 如何将许多 if 语句压缩成更小、更易读的内容?

转载 作者:行者123 更新时间:2023-11-30 18:23:25 25 4
gpt4 key购买 nike

我正在为生命游戏编写代码。其中一个功能应该是“进化”当前的一组细胞。这意味着我必须有一些条件,如果 if 语句满足条件,那么该单元格将成为“死”或“活”单元格。

但是,只有一些下一个单元格正在初始化,因此我必须将其余不受条件影响的下一个单元格设置为 DEAD。

由于有四个条件,我想将 if 语句压缩到尽可能少的数量。

条件是:

  • 具有 0 或 1 个存活邻居的细胞会在下一代死亡。
  • 一个细胞如果有 2 或 3 个活着的邻居,就会产生下一代。
  • 具有 4 个或更多存活邻居的细胞将在下一代死亡。
  • 一个空的单元格恰好有 3 个活着的邻居,就变成了一个活的单元格下一代细胞。

我尝试将尽可能多的条件放入一个 if 语句和 if 处的 else 语句中,这意味着如果没有一个单元格满足条件,它将自动设置为 DEAD。这样 field[i][j].next 中的所有单元格要么死要么活。

我想提一下,数组 field[i][j].current 已使用 DEAD 和 ALIVE 单元格进行初始化。

  void evolve(const int rows,const int cols,cell field[rows][cols], int 
NeighbourCounter[i][j]){

CellNeighbour(rows, cols,field,NeighbourCounter);

for(int i = 0;i<rows;i++){
for(int j =0;j<cols;j++){
if(field[i][j].current == ALIVE && NeighbourCounter[i][j] < 2){
field[i][j].next == DEAD;
}
if(field[i][j].current == ALIVE && NeighbourCounter[i][j] == ||NeighbourCounter[i][j] == 2){
field[i][j].next = ALIVE;
}
if(field[i][j].current == ALIVE && NeighbourCounter[i][j] >= 4){
field[i][j].next = DEAD;
}
if(field[i][j].current == DEAD && NeighbourCounter[i][j] == 3){
field[i][j].next = ALIVE;
}
}
else{
field[i][j].next = DEAD;
}
}

NeighbourCounter 是一个数组,用于计算每个单元有多少个 ALIVE 邻居。

预期输出应该是 field[rows][cols] 应该更新,并且更新后的版本存储在“field[rows][cols].next”中。

最佳答案

How to condense many if-statements into something smaller and more readable?

您使用的代码格式不正确。例如,不清楚下面的 else 语句与哪个 if 语句配对。

 else{
field[i][j].next = DEAD;
}

错误的代码格式通常是许多错误(包括逻辑错误)的根源。:)

所有这些 if 语句

      if(field[i][j].current == ALIVE  && NeighbourCounter[i][j]<2){
field[i][j].next == DEAD;
}
if(field[i][j].current == ALIVE && NeighbourCounter[i][j] ==3
||NeighbourCounter[i][j] ==2 ){
field[i][j].next = ALIVE;
}
if(field[i][j].current == ALIVE && NeighbourCounter[i][j] >= 4
){
field[i][j].next = DEAD;
}
//...

可以重写为

if ( field[i][j].current == ALIVE )
{
if ( NeighbourCounter[i][j] < 2 )
{
field[i][j].next == DEAD;
}
else if ( NeighbourCounter[i][j] < 4 )
{
field[i][j].next = ALIVE;
}
else
{
field[i][j].next = DEAD;
}
}
else if ( field[i][j].current == DEAD )
{
if ( NeighbourCounter[i][j] == 3 )
{
field[i][j].next = ALIVE;
}
}
// ...

这使代码更具可读性。

作为替代方法,您可以使用 switch 语句,例如这样

switch ( field[i][j].current )
{
case ALIVE:
{
// ...
}

case DEAD:
{
// ...
}

default:
{
// ...
}
}

关于c - 如何将许多 if 语句压缩成更小、更易读的内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56529092/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com