5

これはばかげた質問かもしれませんが、答えは簡単ですが、1時間インターネットを検索しても、これを行う方法が見つかりませんでした。

    public bool GetCollision(int x, int y)
    {
        bool isPassable;

        if (x < 0 || x >= 20)
        {
            isPassable = false;
        }

        if (y < 0 || y >= 20)
        {
            isPassable = true;
        }

        return isPassable;
    }

最後から 2 番目の行では、isPassable が割り当てられていないことを示していますが、明らかに if ステートメントで割り当てています。私の側では、「if」ステートメントについて根本的な誤解があるに違いありません。

それで、どうすればこれを行うことができますか?どうもありがとうございました。

4

7 に答える 7

9

これは、デフォルト値が明示的に設定されていないためです。isPassable をデフォルトで False に設定すれば完了です。


また、次のようなこともできます。

return (!(x < 0 || x >= 20) && (y < 0 || y >= 20))

編集: 上記のソリューションは、IF 間に AND 関係が存在する場合にのみ機能します。

于 2012-12-19T07:47:39.970 に答える
4

と の場合、この関数の結果はどうx == 10なりy == 10ますか? その結果がどうなるかを定義していないため、コンパイラが不平を言っています。この例では、最初のifステートメントは に評価されfalse、何も起こりません。次に、2 番目のifステートメントは に評価されfalse、関数は に値を割り当てずに返そうとしisPassableます。

于 2012-12-19T07:49:23.063 に答える
3

いずれのIf条件も True と評価されない場合、変数には何も返されません。

したがって、デフォルト値を に割り当てますisPassable

于 2012-12-19T07:48:51.103 に答える
2

"isPassable is Unassigned"IFどちらの条件も満たされない場合、コンパイラは不平を言ってい ます。したがって、次のように宣言しながら値を割り当てる必要があります。

 isPassable=false;
于 2012-12-19T07:51:51.367 に答える
2

問題は、変数がまったく割り当てられない条件があることです。たとえば、x と y が両方とも 0 の場合、ルーチンは割り当てられていない変数を返します。それはノーノーです。

明確にするために、問題は初期代入がないことではなく ( のようなisPassable = false;)、いくつかの条件をチェックするのを忘れた可能性があることをコンパイラーが警告することです。

のような構造

bool isPassable;
if (...)
    isPassable = true;
else
    isPassable = false;
return isPassable;

大丈夫だったでしょう!

于 2012-12-19T07:50:42.480 に答える
0

次のようにすることもできます。

public bool GetCollision(int x, int y)
{
    bool isPassable = false;

    if (y < 0 || y >= 20)
    {
        isPassable = true;
    }

    return isPassable;
}

このようにして、この条件が満たされた場合にのみtrueを返すようにすることができます。そうでない場合は、 falseを返します。

于 2012-12-19T08:23:00.113 に答える
0

デフォルト値が必要です:

bool isPassable = false;

true か false かを正確に判断できない場合は、nullable values代わりにを使用してください。null にするisPassableこともできます。

public bool? GetCollision(int x, int y)
{
    bool? isPassable = null;

    if (x < 0 || x >= 20)
    {
        isPassable = false;
    }

    if (y < 0 || y >= 20)
    {
        isPassable = true;
    }

    return isPassable;
}
于 2012-12-19T08:26:37.170 に答える