布尔在if语句中使用

时间:2017-11-04 19:35:36

标签: java if-statement boolean

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语句部分。所以我发现如何在头脑中阅读它被设置为假。如果没有找到...所以如果不是假的(因为发现=假),做任何事情。所以基本上我把它读作双重否定,看看是否(真实)无论如何。但它没有意义。我知道它不是一个inifite循环,它运行正常,但我没有得到逻辑,它不能是双重否定。谢谢!

编辑: 所以我知道我们可以回报我,更容易,我同意。我只是在循环中使用布尔值的逻辑时遇到问题,而不是“!”符号

基本上如果我写这个我会说(忽略其他一切)

found = true //找到的是真的 虽然(!发现)//但不是真的 继续下一个索引//继续直到....实际上我现在变得非常困惑因为打破循环我们会继续,直到发现是假的逻辑上是向后的

编辑:谢谢大家的意见!!这一切都帮助我理解了它!

10 个答案:

答案 0 :(得分:2)

public static int search(int[] a, int target)
{
   for (int i = 0; i < a.length; i++){
        if (a[i] == target) return a[i]; // or i if you want to get ingex of searched element
   }
   return -1;
}

答案 1 :(得分:1)

! operator反转以下逻辑语句(逻辑非门)。

因为!false是真的,这意味着它不是双重否定。

答案 2 :(得分:1)

!found表示英语中的含义相同,即“未找到”。 i<a.length的整个条件显示“虽然i是有效索引且找不到[目标是”,但这非常接近,因为您知道“未找到”是指{{1} }

您可以简化此循环以避免布尔变量:

target

答案 3 :(得分:1)

你认为这更容易吗?

while(i < a.length) {
    if (a[i] == target) {
        return i;
    }
    i++;
}
return -1;

答案 4 :(得分:1)

让我将其分解为几个部分:

!false

所以你从假开始。当found求值为true时,继续循环直到truei<a.length,这将使整个条件为假,从而导致您打破循环。

i<length:当true返回found时,继续循环。 你基本上希望i<length为假,&&让循环继续。如果不满足任何条件,则打破循环(查看 if (a[i] == target) found = true; else i++; )。

public static int search( int[] a, int target)
{
    int foundIdx = -1;
    for( int i = 0; i < a.length && foundIdx < 0; i++ )
    {
         if( a[i] == target )
         {
             foundIdx = i;
             break;
         }
    }
    return foundIdx;
}

这很简单:如果找到了数字,请将找到的布尔值设为true。这将导致下一个迭代条件评估为false,从而导致循环中断。

答案 5 :(得分:0)

代码在int的数组上循环,而foundfalse。 在循环期间,它将(a[i])中的当前数组值与目标进行比较。如果值相同,则将found设置为true

因此在循环之后它检查found是否为true,如果是,则返回i,即最后一个比较值的索引。

答案 6 :(得分:0)

在循环开始时发现为false,因此while循环将开始。找到值后,将found设置为true并停止循环。 我会改写循环:

this.items.data

答案 7 :(得分:0)

所以,我认为您对while语句有疑问,但我会对所有代码进行一些评论,以试图解释它的作用:

    public static int search(int[] a, int target)
    {
        int i=0;
        boolean found = false;

    // While i index is less than the array length AND item hasn't been found (negation of the found variable), keep iterating on the loop. If not (if any of this two conditions aren't met), continue.
        while((i<a.length) &&  ! found)
        {
/* If the targeted item has been found, set found boolean to true, so this loop will stop before next iteration
*/
            if (a[i] == target)
            {

            found = true;   
            }
// If targeted item is not this one, increase the index for next iteration
            else i++;
        }
/* This condition only will be met if we exit the loop because we found the target. In that case, we will return the index in the array of that index. If we "finished" the array without finding it, we will return -1, meaning "it wasn't found".
*/
        if (found) return i;
        else return -1;
    }

答案 8 :(得分:0)

设置boolean found = false;,因为您还没找到您要查找的内容,然后while (i<a.length)! found表示如果您尚未找到数组的结尾,你还没有找到你正在寻找的东西

{
    if (a[i] == target)
    {
    found = true;   
    }
    else i++;
}

如果您发现它将变量found更改为true,那么使用否定运算符!将更改为false并且&&将使您退出while循环,因为其中一个这两个条件不再适用。 换句话说,如果found为假,那么循环是真的,因为你有!(未)找到它。如果found为真,则循环中的结果为false,因为您已找到它。

答案 9 :(得分:0)

您对使用IntStream有何看法?

const pingEpic = action$ =>
  action$.ofType(PING)
    .concatMap(() =>
      Observable.timer(1000)
        .mapTo({ type: PONG })
    );