5

我知道这可能是一个愚蠢的问题,答案很简单,但是在互联网上搜索了一个小时后,我找不到这样做的方法;

    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;
    }

在倒数第二行它说 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,并且什么也不会发生。然后第二个if语句将评估为false,并且该函数将尝试返回没有分配给 的值isPassable

于 2012-12-19T07:49:23.063 回答
3

如果没有If条件评估为 True,则该变量将没有任何返回值。

因此,为 分配一个默认值isPassable

于 2012-12-19T07:48:51.103 回答
2

问题是在某些情况下根本没有分配变量。例如,如果 x 和 y 都为 0,则例程将返回一个未分配的变量。这是一个禁忌。

澄清一下,问题不在于没有初始分配(如isPassable = false;),而是编译器警告您您可能忘记检查某些条件。

像这样的构造

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

本来可以的!

于 2012-12-19T07:50:42.480 回答
2

"isPassable is Unassigned"编译器抱怨是因为如果两个 IF条件都不满足怎么办。因此,您需要在声明它的同时为其分配一个值:-

 isPassable=false;
于 2012-12-19T07:51:51.367 回答
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;

如果你不能确切地说,是真还是假,请nullable values改用,所以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 回答