2016-05-20 357 views
2

所以我有這種方法顯示任何包含匹配子字符串(不區分大小寫)的名稱,並將匹配的名稱打印到JTextArea。它從已存儲爲數組的輸入文件中搜索名稱。但是,如果我想在用戶鍵入文件中不存在的內容時顯示「未找到結果」,則會顯示「未找到結果」,即使是存在的名稱也是如此。如果我拿使用if和else語句

else 
    displayArea.append("\n No results found"); 

聲明我的方法再次正常工作並顯示正確的信息。那麼,如何在不導致我的if語句停止工作的情況下顯示「找不到結果」呢?

private void match(String targetSubstring) 
    { 
    displayArea.setText(""); 
    displayArea.append("FIND RESULTS for: " + targetSubstring); 
    displayArea.append("\n"); 
    displayArea.append("\n Name    Best Decade"); 
    displayArea.append("\n---------------   ---------------"); 
    targetSubstring = targetSubstring.toUpperCase(); 
    for (int i = 0; i < namesArray.length; i++) { 
     String theName = namesArray[i].getName(); 
     if (theName.toUpperCase().contains(targetSubstring)) 
     { 
     displayArea.append("\n" + namesArray[i].getName() + "\t" + namesArray[i].bestDecade()); 
     } 
     else 
     displayArea.append("\n No results found"); 
    } 
    } 

回答

6

此代碼有邏輯錯誤。

它需要被重新寫爲:

// flag to see if any matches are found 
boolean foundSomething = false; 

for (int i = 0; i < namesArray.length; i++) { 
    String theName = namesArray[i].getName(); 
    if (theName.toUpperCase().contains(targetSubstring)) 
    { 
     displayArea.append("\n" + namesArray[i].getName() + "\t" + namesArray[i].bestDecade()); 
     foundSomething = true; 
    } 
} 

// Now, if you didn't find anything, then add this 
if (!foundSomething) { 
     displayArea.append("\n No results found"); 
} 

原因: 具有其他情況下,在for循環將追加「沒有找到結果」隨時在namesArray一個索引沒有找到匹配。

1

問題是:的確namesArray確實包含targetSubstring?在我看來,你應該從提取開始

if (theName.toUpperCase().contains(targetSubstring)) 
{ 
    displayArea.append("\n" + namesArray[i].getName() + "\t" + namesArray[i].bestDecade()); 
} 
else 
    displayArea.append("\n No results found"); 

要新方法,並寫一些簡單的測試 - 這種情況正確嗎?

如果測試說條件沒問題,那麼你應該調試這部分代碼,看看namesArray中的數據有什麼問題。因爲此時代碼看起來很好。

+0

不,他的循環中存在邏輯錯誤,爲數組中的每個元素都打印「未找到結果」,但不匹配子字符串。所以代碼並不完全正確 –

1

這裏的問題是,您打印的數組中的每個元素都不匹配子字符串「找不到結果」。例如,如果第五個元素匹配,但不是前四個,則會爲這四個元素中的每一個打印「未找到結果」。最好添加一個布爾值,告訴你是否找到某個元素。循環之後,檢查這個布爾值是否告訴你沒有找到匹配的元素。在這種情況下,請告訴用戶。

順便說一句:這不會很難找到使用調試器。