在以下代码中,如何防止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
。由于您的支票,您不会获得
ArrayOutOfBoundException
的mod
:if(mod >= dates.length) {
break;
}
对于空检查,添加
if (dates[mod] != null) {
mydates[i] = DateFormatter.GraphDateToString(DateFormatter.convertToDate(Long.parseLong(dates[mod])));
}
避免NullPointerException