我正在处理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变量,但是有人告诉我不要在循环中声明变量,但是也许建议不再适用。
答案 0 :(得分:2)
您没有在循环内为kangaroo1Location
或kangaroo2Location
分配新值。这些变量的 only 分配在循环之前:
var kangaroo1Location = x1 + kangaroo1DistanceJumped;
var kangaroo2Location = x2 + kangaroo2DistanceJumped;
这些变量分配并没有声明总是正确的功能关系-它们只是对表达式(例如x1 + kangaroo1DistanceJumped
)求值并将结果分配给变量。
作为一个简单的示例,请考虑以下代码:
int x = 10;
int y = x;
x = 20;
Console.WriteLine(y);
结果将打印到控制台10,不是20。x
和y
是自变量,恰好初始化了y
在某个时候的值为x
。以后对x
所做的更改不会影响y
。将相同的逻辑应用于您的代码,您将了解为什么它不起作用。