如何在不使用if或switch语句的情况下编写此函数(有效性检查/变量保护检查除外)?

Kar*_*ren 1 c if-statement

正如我在说明中提到的,我需要编写此函数而不使用除有效性检查/变量保护检查之外的任何if语句.但我无法确定我的代码是否符合此规范.如果我的代码不起作用,如何在不使用禁止的if语句的情况下编写代码?

这是问题所在: 在此输入图像描述

这是我的代码:

int badgePoly(int x, int y) {
   int mavenbadge, incirclebadge, herobadge, weatherbadge, inquattrobadge,
      bronzebadges, polybadge;

   if ((x >= 1 && x <= 20) && (y >= 1 && y <= 20)) {
      mavenbadge = badgeBoundaryMaven(x, y);     
      incirclebadge = badgeInnerCircle(x, y); 
      herobadge = badgeLocalHero(x, y);
      weatherbadge = badgeBoringWeather(x, y); 
      inquattrobadge = badgeInQuattro(x, y); 
      bronzebadges = mavenbadge + incirclebadge + herobadge + weatherbadge +
         inquattrobadge;   
      if (bronzebadges >= 2) {
         polybadge = 1;
      }
      else {
         polybadge = 0;
      }
   }
   else {
      polybadge = -1;
   }

   return polybadge;
}
Run Code Online (Sandbox Code Playgroud)

注意:mavenbadge,incirclebadge,herobadge,weatherbadge和inquattrobadge都是你可以在一个字段中获得的不同类型的青铜徽章(x,y); 和bronzebadges只是所有这些的总和,可以找到一个字段(x,y)中的青铜徽章总数.

orl*_*rlp 5

这很简单.替换这个:

if (bronzebadges >= 2) {
    polybadge = 1;
} else {
    polybadge = 0;
}
Run Code Online (Sandbox Code Playgroud)

有了这个:

polybadge = (bronzebadges >= 2);
Run Code Online (Sandbox Code Playgroud)

现在,显然如果其中一个badgeXXX函数使用if语句你需要做更多的事情,但是如果没有代码,我无法帮助你.

  • 注意:在我看来,这甚至不是一个"挑战",这是*应该*从一开始就写出的方式,而不是试图遵循对你能够和不能使用的任何限制.使用`if/else`将某个变量设置为1或0是一个强大的[代码气味](http://en.wikipedia.org/wiki/Code_smell). (2认同)