在下面的代码中,我如何防范ArrayIndexOutOfBoundsException或NullPointerException,因为在某些时候,注释第2行将为mydates []或date [mod]中的最后一个条目提供一个空值。如果我在注释行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])));
}
}
我解决它的方法是再次迭代数组并检查空值,同时从那里填充新数组。但我想知道是否有更好的解决方案。
答案 0 :(得分:1)
您可以检查对象是否为空。
在你的情况下,
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
}
}
}
希望有所帮助。
答案 1 :(得分:1)
如果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