0

以下のコードをコンパイルするたびに、java.lang.NullPointerExceptionエラーが発生します。私は自分のコードを見ましたが、正しいようです。コンパイラが壊れていますか、それとも何か見逃していましたか?

 public byte[][] divi(byte[] pac, int pac_len){
      int set = 0 ;
      byte [][] data = null;

      for( int i= 0 ; set != pac_len; i++) { 
           if (set + 33 <= pac_len) {
                data[i] = new byte[33];
                System.arraycopy(pac, set, data[i], 0, 33);
           }
       }
  }
4

2 に答える 2

9

もちろん、あなたは何かを逃しました: 課題

byte [][] data = null;

に明確に割り当てnullますdata。その後、 に割り当てを行うとdata[i]、 が発生しNullPointerExceptionます。

上記の行を次のように書き換えます

byte [][] data = new byte[][pac_len];

問題を修正する必要がありますNPE

set無限ループの問題は解決しません。変数を調整する必要があります。現在、setは変更されていないため、ループは無限です。コードが長い配列を 33 バイトのチャンクに分割しようとしているようです。pac_lenが33 で割り切れない場合は、特に注意する必要があります。これは、終了するためにループ条件setが正確pac_lenである必要があるためです。

于 2013-05-05T10:09:22.843 に答える