0

我想,这是一个非常简单的问题,但我就是想不通。

一个数组包含一个整数列表,如果数组中的每个数字“x”后跟数字“y”,我想返回 true。

{x,3,4,y}所以带有or {x,x,y,4,5}or的数组{5,8,x,x}false.

{x,y,4,1}而带有or的数组{x,y,5,1,x,y}将是true.

这是我到目前为止所尝试的:

for (int i = 0; i < nums.length-1; i++)
{
    if (nums[i] == x && nums[i+1] == y)
    {
        return true;
    }
    else
    {
        return false;
    }
}

return false;

但是,我的代码仅适用于数组中的前两个元素(即 0 和 1)。它不会检测到数组中进一步向下的任何整数,那么我该怎么做呢?

谢谢你。

4

8 回答 8

5

如果数组中的每个数字“x”后跟数字“y”,我想返回 true。

您需要摆脱else并修改检查,如下所示:

for (int i = 0; i < nums.length - 1; i++)
{
    if (nums[i] == x && nums[i + 1] != y)
    {
        return false;
    }
}

return true;

注意事项:

  1. true如果x数组中不存在,则返回。从这个问题中不清楚这是否是你想要的行为。
  2. 这不检查是否x是数组的最后一个元素。同样,如果发生这种情况,您期望发生什么并不完全清楚。
于 2013-10-09T10:35:02.783 回答
1
for (int i = 0; i < nums.length-1; i++) {    
    if (nums[i] == 2 && nums[i+1] != 3) {
        return false;
    }
}

return true;
于 2013-10-09T10:35:40.383 回答
1

'x'如果数字后面没有.此代码将返回 False 'y'

for (int i = 0; i < nums.length-1; i++)
{
    if(nums[i] == 2 && nums[i+1] != 3) {
        return false;
    }
}
return true;
于 2013-10-09T10:35:59.253 回答
1

当代码到达一条return语句时,它会停止执行函数并返回指定的值,这就是为什么你的 for 只执行一次。

由于您希望条件适用于数组中的所有元素,因此当您发现 2 后面没有跟 3 时,您必须返回 false。如果 2 后面跟 3,您只需继续检查下一个位置.

像这样:

for (int i = 0; i < nums.length-1; i++)
{ 
     if(nums[i] == 2 && nums[i+1] != 3)
     {
          return false;
     }
}
return true;
于 2013-10-09T10:38:52.830 回答
0
for (int i = 0; i < nums.length-1; i++)
  {
    if(nums[i] == 2 && nums[i+1] == 3)
    {
    return true;
    }

  }
  return false;
于 2013-10-09T10:35:16.097 回答
0

试试关注

    boolean flag = false;
      for (int i = 0; i <= (nums.length-1); i++) {
         if(nums[i] == x) {
              if (i == (nums.length-1)) {
                  if(nums[i] == x) {
                      flag = false;
                  }
              } else {
                  if(nums[i+1] == y) {
                      flag = true;
                  } else {
                      flag = false;
                      break;
                  }
              }
           }
      }
      return flag;
于 2013-10-09T12:10:37.323 回答
0

您可以尝试以下方法:

if(nums[nums.length - 1] == x)
  {
  return false;
  }
else
  {
  boolean flag = false;

  for(i = 0; i < nums.length - 1; i++)
    {
    if(nums[i] == x)
      {
      if(nums[i + 1] == y)
        {
        flag = true;
        }
      else
        {
        flag = false;
        break;
        }
      }
    }

  return flag;
  }
于 2013-10-10T10:21:56.997 回答
0

您的代码总是在第一次迭代中返回。因为你在 If 和 else 块中都写了 return 。

return;如果内部有任何其他逻辑,则删除 else 案例或仅删除from else 案例。

int x = 2;
int y=3;
    for (int i = 0; i < nums.length-1; i++) {    
        if (nums[i] == x && nums[i+1] != y) {
            return false;
        }
    }
return true;

如果数组中没有 x,它将返回 true。如果你有任何 x 后面没有 y,它将返回 false。

于 2013-10-09T11:16:10.453 回答