为什么此方法会导致运行时错误?我理解calc不会使用空字符串,所以如果是这样的话,我将小时设置为0.
呼叫:
String hoursJLabel = actionObject.calculateHours();
totalHours.setText(hoursJLabel);
方法:
public String calculateHours (){
double sum = 0;
double hour = 0;
for (int i = 0; i < 7; i++) {
if (hourArray[i].getText() != "") {
hour = Double.parseDouble(hourArray[i].getText());
}
else {
hour = 0;
}
}
sum += hour;
return String.format("%.2f", sum);
}
答案 0 :(得分:1)
要检查非空String
是否为空,请使用length()
方法:
if (hourArray[i].getText().length() == 0) ...
如果字符串可以是null
,请在长度之前添加一个检查,如下所示:
String str = hourArray[i].getText();
if (str != null && str.length() == 0) ...
如果您使用Java-6或更高版本,则可以进一步简化:
String str = hourArray[i].getText();
if (str != null && str.isEmpty()) ...
答案 1 :(得分:1)
calculateHours()
中有多种可能发生运行时错误:
hourArray
为null
并抛出NullPointerException
hourArray[i]
为空并抛出NullPointerException
hourArray[i].getText()
无法解析为Double
并抛出NumberFormatException
hourArray
可能包含少于7个元素,这会引发IndexOutOfBoundsException
除此之外,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()
方法中检查所有这些可能性,那就更好了。你注意到如果必须在这里完成所有这些检查,那么阅读会有多难。
答案 2 :(得分:0)
FI:Apache commons StringUtils有一个方法isBlank,可以处理null,空和只有空格等的字符串,