【发布时间】:2018-04-17 07:24:22
【问题描述】:
public static int search(int[] a, int target)
{
int i=0;
boolean found = false;
while((i<a.length) && ! found)
{
if (a[i] == target)
{
found = true;
}
else i++;
}
if (found) return i;
else return -1;
}
我不明白 if 语句部分。所以我在脑海中阅读它的方式被设置为假。如果没有找到......所以如果不是假的(因为找到=假),做任何事情。所以基本上我把它读作双重否定,看看(真)是否下降。但这没有意义。我知道它不是一个无限循环,它运行良好,但我不明白逻辑,它不能是双重否定。谢谢!
编辑: 所以我知道我们可以返回我,更容易是的,我同意。我只是在循环中使用非“!”的布尔值的逻辑遇到问题。符号。
基本上如果我写这个我会说(忽略其他一切)
found = true //found 开头为真 while (!found) //虽然不是真的 继续到下一个索引//继续直到...。实际上我现在变得非常困惑,因为要打破循环,我们将继续直到发现是假的,这在逻辑上是向后的
编辑:谢谢大家的cmets!这一切都帮助我理解了它!
【问题讨论】:
-
这可以通过返回索引而不是
found = true;来简单得多。然后在最后总是返回-1,因为只有在没有找到任何东西的情况下你才能到达它。 --- 不怪你没看懂,写的有点怪。 -
拿一支笔和一张纸。然后手动运行它。
-
@GhostCat 经常说的话更容易理解。基本上发生的情况是您将
found设置为false,因此只要!found就在while 循环内部 执行代码块——实际上是双重否定(found是@987654327 @,所以not false是true)。只要括号内的语句是true,whileonly 就会执行。 -
噢噢!!!我不知道while循环内的语句一定是真的。我认为这取决于你想要什么。所以基本上是“!”的意思。是使循环的这一部分为真,以便循环可以运行。然后当它找到时,我们将 found 设置为 true,现在是“!”使发现为假,我们退出。所以基本上循环内的部分我不应该直接翻译成英文。只是担心它是真还是假以保持循环运行?
标签: java if-statement boolean