1

在下面的代码中,我如何防范 ArrayIndexOutOfBoundsException 或 NullPointerException 因为在某些时候,注释第 2 行将为 mydates[] 中的最后一个条目给我一个空值,或者 dates[mod] 如果我将抛出一个 ArrayOutOfBoundExceptionmod > 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])));
    }

}

我解决它的方法是再次迭代数组并检查空值,同时从那里填充一个新数组。但我想知道是否有更好的解决方案。

4

2 回答 2

1

如果mydates只有 11 长,你知道至少有dates那么长,也许可以迭代使用:mydates.length

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

然后你不会得到一个ArrayOutOfBoundExceptionwhen i >= mydates.length

由于您的支票,您不会得到ArrayOutOfBoundExceptionfor :mod

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

对于空检查,添加

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

避免 NullPointerException

于 2013-08-09T17:43:52.130 回答
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 回答