2017-03-10 16 views
-3

バイト配列をループする際に問題が発生していました。基本的には、2つのネストされたforループがあります。外側のものは256回ループし、内側のものはバイト配列の最初の8バイトに対してループします。私がやろうとしています何Javaでバイト配列がすべて0であるかどうかを調べる方法

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であるかどうかを確認することです。しかし、これを行うことで、最初の8バイトを出力しようとすると、結果は[-26、0、-28、-49,64,45,66,66]になります。

私は打ち切る前にすべての0のfirst8bytesを取得しようとしています。私は何かが本当に私のロジックに間違っていることを知っていますが、私はそれを修正する方法は考えていません。

ありがとうございます!

は、私はそれを行うだろう方法です

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である1つのバイトを見つけて。あなたの例では、2番目のバイトは0 ... – John3136

+0

ですが、どうすれば修正できますか?私はロジックが間違っていることを知っている、私はそれを試すためにブール変数を追加しましたが、同じ結果になります – hyperfkcb

+0

本当にあなたは 'byteArray'の同じ8バイトを256回チェックしようとしていますか?あなたは外側のループを通して毎回 'byteArray'の異なる範囲を選択したくないのですか?今はあなたが求めていることを理解するのに本当に苦労しています。 – Gray

答えて

1

を更新 - テストのための方法を記述します。

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

申し訳ありませんが、私が1つの方法でそれをしなければならないとすれば、私は更新された部分で何をしましたか?私は自分のコードがブーリアン論理を間違って取得したと思うが、私は目を覚ましてそれらの詳細を印刷して一致を見つけるが、どうにかして0バイトの配列が1つあるかどうかを調べようとしたときには何も印刷されない。 – hyperfkcb

+0

Nevermind私はすでに多くのおかげで分かった! – hyperfkcb

+0

複数のレベルを破ることは、ほとんど常にコードの匂いです。可能であれば、条件でループを終了します。 – laune

関連する問題