在以下代码中,如何防止ArrayIndexOutOfBoundsException或NullPointerException,因为在某些时候,注释行2将为我的mydates []或dates [mod]中的最后一个条目提供一个空值,如果我将抛出ArrayOutOfBoundException在注释行1中执行mod > dates.lenght

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])));
    }

}


我解决的方法是再次遍历数组,并在从那里填充新数组时检查空值。但我想找出是否有更好的解决方案。

最佳答案

如果mydates只有11个长,并且您知道dates至少有那么长,则可以使用mydates.length进行迭代:

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


那么当ArrayOutOfBoundException时,您将不会得到i >= mydates.length

由于您的支票,您不会获得ArrayOutOfBoundExceptionmod

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


对于空检查,添加

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


避免NullPointerException

09-18 10:38