2017-03-10 81 views
-3

我在尝试通过字节数组循环时遇到了一些问题。基本上我有两个嵌套for循环。外部循环将循环256次,内部循环会循环前8个字节的字节数组。如何确定java中的字节数组是否全为零

outerloop: 
    for (int i = 0; i < 256; i++){ 
     // code 

     byte [] first8bytes = Arrays.copyOfRange(byteArray, 0, 8); 

     for(int k = 0; k < first8bytes.length; k++){ 
      if(k != 0){ 
      }else{ 
       System.out.println(Arrays.toString(first8bytes)); 
       break outerloop; 
      } 
     }   
    } 

我所试图做的是检查first8bytes全为0。如果其中一个不为零,我会回到outerloop。但是,通过这样做,当我尝试打印出前8个字节时,结果为[-26,0,-28,-49,64,45,66,66]。

我想在爆发之前得到所有0的前8个字节。我知道我的逻辑有些错误,但我不知道如何解决这个问题。

在此先感谢!

更新

boolean all0 = true; 

    for (int i = 0; i < 256; i++){ 
    byte [] first8bytes = Arrays.copyOfRange(byteArray, 0, 8); 
    for(int k = 0; k < first8bytes.length && all0; ++k){ 
      if(first8bytes[k] != 0) all0 = false; 
    } 
    if(all0){ 
     System.out.println(Arrays.toString(first8bytes)); 
     break; 
    }} 
+0

。在你的例子中,第二个字节是0 ... – John3136

+0

但我该如何解决它?我知道逻辑是错误的,我甚至添加了布尔变量来尝试它,但它导致相同 – hyperfkcb

+0

你真的试图检查'byteArray' 256次相同的8个字节?你确定你不想每次通过外循环时在'byteArray'中选择不同的范围吗?现在我很难搞清楚你在问什么。 – Gray

回答

1

这就是我会做 - 写的测试方法:只要你发现1个字节是你打印阵列0

boolean allZeros(byte[] bytes){ 
    boolean all0 = true; 
    for(int i = 0; i < bytes.length && all0; ++i){ 
     if(bytes[i] != 0) all0 = false; 
    } 
    return all0; 
} 

for (int i = 0; i < 256; i++){ 
    // code 

    if(allZeros(Arrays.copyOfRange(byteArray, 0, 8))) break; 

} 
+0

对不起,让我们说,如果我必须用一种方法做到这一点,我可以只做我在更新部分做的事情吗?我认为我的代码错误地得到了布尔逻辑,因为我设法通过打印出这些细节来找到匹配,但不知何故,当我试图检查是否有一个全0的单个字节数组时,它什么都不打印 – hyperfkcb

+0

Nevermind我非常感谢! – hyperfkcb

+0

突破多个关卡几乎总是一种代码味道。如果可能的话,根据条件终止循环。 – laune

相关问题