不在循环外重新评估变量

时间:2019-05-24 14:08:48

标签: c#

我正在处理Hackerrank问题,而我的while循环无法正常工作。我在循环外部有一个变量,它是另外两个变量的总和,其中每个循环都会更新其中一个。由于我在循环中有一个条件语句,该条件语句包含循环外部的变量,因此我希望每个循环都重新评估它,但事实并非如此。我可以解决此问题,但想知道为什么会这样。

请在下面查看我的方法。我希望kangaroo1Location和kangaroo2Location将在每个循环中重新评估,以包括kangaroo1DistanceJumped和kangaroo2DistanceJumped的新值,但事实并非如此。

    static string Kangaroo(int x1, int v1, int x2, int v2)
    {
        var kangaroo1DistanceJumped = v1;
        var kangaroo2DistanceJumped = v2;
        var kangaroo1Location = x1 + kangaroo1DistanceJumped;
        var kangaroo2Location = x2 + kangaroo2DistanceJumped;

        while (kangaroo1DistanceJumped <= 10000 && kangaroo2DistanceJumped <= 10000)
        {
            if (kangaroo1Location == kangaroo2Location)
            {
                return "YES";
            }

            kangaroo1DistanceJumped = kangaroo1DistanceJumped + v1;
            kangaroo2DistanceJumped = kangaroo2DistanceJumped + v2;

        }

        return "NO";
    }

我知道我可以在while循环中声明kangaroo1Location和kangaroo2Location变量,但是有人告诉我不要在循环中声明变量,但是也许建议不再适用。

1 个答案:

答案 0 :(得分:2)

您没有在循环内为kangaroo1Locationkangaroo2Location分配新值。这些变量的 only 分配在循环之前:

var kangaroo1Location = x1 + kangaroo1DistanceJumped;
var kangaroo2Location = x2 + kangaroo2DistanceJumped;

这些变量分配并没有声明总是正确的功能关系-它们只是对表达式(例如x1 + kangaroo1DistanceJumped)求值并将结果分配给变量。

作为一个简单的示例,请考虑以下代码:

int x = 10;
int y = x;

x = 20;
Console.WriteLine(y);

结果将打印到控制台10,不是20。xy是自变量,恰好初始化了y在某个时候的值为x。以后对x所做的更改不会影响y。将相同的逻辑应用于您的代码,您将了解为什么它不起作用。