1

次のコードでは、ArrayIndexOutOfBoundsException または NullPointerException を防ぐにはどうすればよいですか。ある時点で、コメント行 2 が mydates[] の最後のエントリに null 値を与えるか、dates[mod] が ArrayOutOfBoundException をスローするためです。mod > dates.lenghtコメント行 1 で行う

if(dates.length >= 10){  
    mydates = new String[11];
    int last = dates.length;
    int mod = 0;
    int add_mod = (int) Math.round((double)Math.round(last) /10); 

    for(int i =0; i < dates.length; i++){
        if(mod >= dates.length){ // line1
            break;
        }

        mydates[i] = DateFormatter.GraphDateToString(DateFormatter.convertToDate(
                        Long.parseLong(dates[mod])));  //line2

        mod += add_mod;
    }

} else {
    mydates = new String[dates.length];

    for(int i =0; i < dates.length; i++){
        mydates[i] = DateFormatter.GraphDateToString(DateFormatter.convertToDate(
                       Long.parseLong(dates[i])));
    }

}

私がそれを解決した方法は、配列を再度反復処理し、そこから新しい配列を作成しながら null 値をチェックすることでした。しかし、もっと良い解決策があるかどうかを知りたいです。

4

2 に答える 2

1

オブジェクトが nullかどうかを確認できます。

あなたの場合、

    if(dates[mod] != null){
        // PERFORM SOME OPERATION
    }


 for(int i =0; i < dates.length; i++){

            if(mod < dates.length){ // line1
            // SOME OPERATION

            if(dates[mod] != null){
                mydates[i] = DateFormatter.GraphDateToString(DateFormatter.convertToDate(
                        Long.parseLong(dates[mod])));  //line2
            }
        }
 }

それが役立つことを願っています。

于 2013-08-09T17:42:08.483 に答える
1

mydatesが 11 の長さしかなく、少なくともdatesそれ以上の長さであることがわかっている場合は、代わりに次のように繰り返します。mydates.length

for(int i =0; i < mydates.length; i++){
...

ArrayOutOfBoundExceptionその後、 whenは取得されませんi >= mydates.length

チェックのためにArrayOutOfBoundExceptionfor を取得できません。mod

if(mod >= dates.length) {
    break;
}

null チェックの場合、追加します。

if (dates[mod] != null) {
    mydates[i] = DateFormatter.GraphDateToString(DateFormatter.convertToDate(Long.parseLong(dates[mod])));
}

NullPointerException を回避するには

于 2013-08-09T17:43:52.130 に答える