【发布时间】:2021-09-15 21:38:01
【问题描述】:
我在 HackerRank 上练习编码,但遇到了其中一个问题。我查看了其他人的处理方式,发现了一些我以前从未见过的东西。
public static int jumpingOnClouds(List<int> c)
{
int count = 0;
for (int i = 0; i < c.Count - 1; i++)
{
if (c[i] == 0)
i++;
count++;
}
return count;
}
这个迭代应该通过一个整数数组。如果整数为 0,则需要一步,如果为 1,则不执行任何操作。在“if”语句中:
if (c[i] == 0)
i++;
count++;
这段代码有效。但是我尝试像这样重写它:
if (c[i] == 0)
{
i++;
count++;
}
但它不像之前的代码那样工作。有人可以帮忙解释一下这个人做了什么,因为我不知道去哪里看或者这甚至叫什么?
【问题讨论】:
-
您对这段代码的作用和实际作用的描述并不准确
-
抱歉,这里有什么问题?如果您想知道为什么添加
{}后代码不起作用,那是因为在原始代码中作者使用了单行 if,所以它等效于if (c[i] == 0) { i++; } count++; -
当你不使用括号时,解释取决于你如何缩进你的行。这正是我总是使用括号的原因;这种语法是灾难的根源。
-
浏览代码的作用。一旦你弄清楚了,就承诺永远不要使用这样的聪明黑客。假设列表包含 5 个整数,索引 1 和 3 为零(因此索引 0、2 和 4 非零)。在 i==zero 上,它是非零的,所以它会跳过
if块,count 会增加。在 i==1 时,该值为零,因此i和 count 都将递增。下一次迭代将有 i==3(不是 2),这会混淆一切。这意味着将忽略索引 2 处的值。剩下的就交给你了 -
@obsidan:不!在 C# 中,在确定块结构时完全忽略缩进(与 Python 不同)。在
if(或for,或...)之后,一个语句或大括号分隔的块被视为if(等)的目标
标签: c#