4

C# または Java のさまざまなスコアに基づいて文字列を返す良い方法を探しています。たとえば、double で表される次のスコアがあるとします。

double scoreIQ = 4.0;
double scoreStrength 2.0;
double scorePatience 9.0;

上記のスコアに基づいて文字列を返したいとしましょう。以下とは異なり、これを明確で理解しやすい方法で構造化する良い方法は何でしょうか。

public static string ReturnScore(double scoreIQ, double scoreStrength, double scorePatience)
    {

        if (scoreIQ <= 5.0)
        {
            if (scoreStrength <= 5.0)
            {
                if (scorePatience <= 5.0)
                {
                    return "You're stupid, weak, and have no patience";

                }
                else if (scorePatience <= 7.5)
                {
                    return "You're stupid, weak, and have some patience";
                }
                else
                {
                    return "You're stupid, weak, and have a lot of patience";
                }
            }
            //Continue elseif return string permutations here
        }
        //Continue elseif return string permutations here
    }

すぐに思いつくのは、ハードコーディングされた文字列を削除し、スコアに基づいて文を作成するキーワード/フレーズの文字列クリエーターを使用することです。ネストされた if ステートメントを使用したくありません。3 つのスコアを超えたい場合はどうすればよいでしょうか。順列は指数関数的に増加します。

上記は単なる例であり、私が探しているのは、そのようなシナリオを処理できる構造です。明らかに、これは間違ったやり方です。私を正しい方向に導いてくれる人を探しています。ありがとう!

4

3 に答える 3

2

一連の yes no 値がある場合、1 つの方法はbitmaskで、各ビットは yes no 値の 1 つを表します。

たとえば、ビット 0 (0 から始まる右から左に番号が付けられたビット) は、scoreIQ >= 4.0 の場合は true、それ以外の場合は 0 とします。

ビット 1 は、scoreStrength >= 2.0 の場合は真、それ以外の場合は 0 とします。

ビット 2 は、scorePatience >= 9.0 の場合は true、それ以外の場合は 0 とします。

したがって、誰かが IQ が高く、非常に忍耐強く、しかし強くないかどうかを知りたい場合はAND、ビットマスクの演算子を使用101してこのテストを実行できます。

その他の例:

000 - person has poor IQ, is not strong, and is not patient
001 - person has good IQ, is not strong, and is not patient
011 - person has good IQ, is strong, and is not patient
110 - person has poor IQ, is strong, and is patient

新しい基準が追加されると、新しい基準に別のビットを使用するだけです。

したがって、気になる特性をテストするためのビットマスクを作成するには、次のようにするだけです。

// find out if person has good IQ and is patient, but not strong
int mask = 0;
mask |= (1<<0);  // set bit 0 (good IQ)
mask |= (1<<2);  // set bit 2 (patient)
if (personsMask & mask == mask) {
    // you know the person has a good IQ and is patient, but they are `not` strong
}
于 2012-06-11T15:07:07.637 に答える