2

我希望我的程序检查整个int[]数组中的每个元素是否都非零。

我目前拥有的:

for(int i=0; i<myArray.length; i++)
{
  if(myArray[i] == 0)
  {
    completed = false;
  }
  else
  {
    completed = true;
  }
}

else statement但是如果中间只有一个数组非零并且不会检查数组的其余部分,则循环会继续执行。

4

5 回答 5

4

一旦找到 0,就需要让它跳出 for 循环:

if(myArray[i] == 0)
  {
    completed = false;
    break;
  }

这样,如果您稍后发现一个非 0 元素,您将不会错误地将已完成设置回 true。

于 2012-12-23T06:49:01.223 回答
2

您可以使用break语句在第一次出现零值时中断循环,如下所示:

  boolean completed = true;
  for(int i=0; i<myArray.length; i++) {
    if(myArray[i] == 0) {
       completed = false;
       break;
     }   
  }

 if(!completed){
     //array has zero values
 }

其他重要提示:

  1. Arrays.binarySearch():仅适用于排序数组,因此在您的情况下没有用。

    使用二进制搜索算法在指定的字节数组中搜索指定的值。在进行此调用之前,必须对数组进行排序(如通过 sort(byte[]) 方法)。如果未排序,则结果未定义。如果数组包含多个具有指定值的元素,则无法保证会找到哪一个。

  2. indexOf方法在内部执行相同的循环和比较。因此,我认为您的原始模式和新语法没有太大区别。虽然它可能会让你的代码看起来很紧凑。

于 2012-12-23T06:50:53.783 回答
0

无需遍历每个元素:JSBIN Demo

使用 IndexOf();

var myArray = [1,2,1,3];
var completed = myArray.indexOf(0) != -1
于 2012-12-23T06:53:57.280 回答
0

你可以break;在找到第一个 0 元素后放入语句,这样它就会跳出循环。

于 2012-12-23T06:50:12.070 回答
-1

或者,你可以做

var completed = true;
for(int i=0; i<myArray.length; i++)
{
   if(myArray[i] == 0)
   {
       completed = false;
   }
}

哪个会做同样的事情。

于 2012-12-23T06:52:57.393 回答