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 を返します。私の2番目のifステートメントは正しいですか? 最後の質問ですが、値を返す構文は正しいですか? (より具体的には、コードのように最後に値を返すことはできますか?)

何らかの理由で、私の出力はインストラクターの出力とは異なるため、既に数式を再確認しましたが、問題ないように見えるので、コードの構文に何か問題があると考えていました。

ありがとう!

4

1 に答える 1

6

x と y が区間 [1, 20] にあったかどうか

はい正解。

x と y がその間隔にない場合は、-1 を返します。私の2番目のifステートメントは正しいですか?

はい

ただし、2 番目の if は必要ありません。else を最初の if に追加します。

   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 に答える