ランタイムエラーが発生する可能性は複数ありますcalculateHours()
。
hourArray
でありnull
、スローしますNullPointerException
- any
hourArray[i]
はnullであり、NullPointerException
hourArray[i].getText()
に解析できず、Double
をスローしますNumberFormatException
- あなたの
hourArray
かもしれない要素が7つ未満である場合、IndexOutOfBoundsException
それに加えて、2つのオブジェクトが等しいかどうかではなく、同じオブジェクトであるかどうかをhourArray[i].getText() != ""
チェックおよびチェックしないため、これは悪い比較です。null
sum += hour
さらに、ループ内に入れたいと思います。そうしないsum
と、の最後の値が含まれますhourArray
。
したがって、メソッドは次のようになります。
public String calculateHours (){
double sum = 0;
if(hourArray != null){ // hourArray might be null
double hour = 0;
for (int i = 0; i < hourArray.length; i++) { // use .length here
// check for nulls and empty String
if (hourArray[i] != null && hourArray[i].getText() != null
&& !"".equals(hourArray[i].getText())) {
try{ // the text might can not be parsed to a double
hour = Double.parseDouble(hourArray[i].getText());
}catch(NumberFormatException ex){
hour = 0;
}
}
else {
hour = 0;
}
sum += hour; // I guess you want that inside your loop
}
}
return String.format("%.2f", sum);
}
calculateHours()
とにかく、このクラスは、メソッドでこのすべての可能性をチェックする必要がないように記述されているとよいでしょう。これらすべてのチェックをここで行う必要がある場合、読みにくくなることに気付くでしょう。