1
double soilQuality(int x, int y) {
   double typeA, typeB, soilQual;

   if (((x >= 1) && (x <= 20)) && ((y >= 1) && (y <= 20))) {
      typeA = 1 + (sqrt((pow(x - SOILQUALACONST, 2)) + (pow(y - SOILQUALACONST,          2)) * (1.0)));
      typeB = (1 + ((abs(x - SOILQUALBCONST) + abs(y - SOILQUALBCONST))/(2.0)));

      soilQual = (((x + y) % 2) * typeB) + ((1 - ((x + y) % 2)) * typeA);
   }

   if (((x < 1) || (x >20)) || ((y < 1) || (y > 20))) {
      soilQual = -1.0;
   }

   return soilQual;

}

只是几个简单的问题,如果我要创建变量保护来测试 x 和 y 是否在区间 [1, 20] 上,那么第一个 if 语句是否正确?如果 x 和 y 不在那个区间,我返回 -1;我的第二个 if 语句正确吗?最后一个问题,我返回值的语法是否正确?(更具体地说,我可以像在我的代码中那样在最后返回值吗?)

因为出于某种原因,我的输出与我的讲师输出不同,我已经仔细检查了我的公式,它对我来说看起来不错,所以我认为我的代码语法有问题。

谢谢!

4

1 回答 1

6

x 和 y 是否在区间 [1, 20]

是,对的。

如果 x 和 y 不在那个区间,我返回 -1;我的第二个 if 语句正确吗?

是的

但是您不需要第二个 if,在第一个 if 中添加 else:

   if (((x >= 1) && (x <= 20)) && ((y >= 1) && (y <= 20))) {
       // both x, and y are in range [1, 20]
   }
   else{
      soilQual = -1.0; 
   }

最后一个问题,我返回值的语法是否正确?

是,对的

因为出于某种原因,我的输出与我的讲师输出不同,我已经仔细检查了我的公式,它对我来说看起来不错,所以我认为我的代码语法有问题。

如果存在语法错误,则代码无法编译!

因为您正在处理读取数字,请阅读: 每个计算机科学家都应该知道的关于浮点运算的知识

于 2013-10-18T05:20:01.243 回答