2012-08-14 82 views
-2

爲什麼此方法會導致運行時錯誤?我瞭解calc不會使用空字符串,所以如果情況如此,我會將hour設置爲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

請顯示異常堆棧跟蹤。 – 2012-08-14 03:07:58

+0

'!=「」'絕對是_a_問題,但它可能不是問題。總是使用'.equals'來比較字符串。 – 2012-08-14 03:58:23

+0

我不確定你的代碼應該在做什麼,但是你不希望'sum + = hour'在for循環中嗎? – Liron 2012-08-14 04:22:27

回答

1

有可能發生在calculateHours()運行時錯誤多種可能性:

  • hourArraynull並拋出一個NullPointerException
  • 任何hourArray[i]爲null,並拋出一個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()方法這一切的可能性,這將是更好的。如果所有這些檢查都必須在這裏完成,您會注意到讀取會有多難。

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()) ... 
+0

或者'.isEmpty()':) – 2012-08-14 03:12:20

+0

@PaulBellora直到Java-6才能使用,但是你是對的。 – dasblinkenlight 2012-08-14 03:13:53

0

FI:Apache的公共StringUtils的有,將處理空的方法的isBlank,空和字符串只有空格等,