2016-05-20 12 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"); 

新しい方法と簡単なテストを書く - この条件は正しいですか?

テストで条件がOKであれば、このコード部分をデバッグして、namesArrayのデータに間違いがないかどうかを確認する必要があります。この時点でコードは正常に見えます。

+0

いいえ、ループ内に論理エラーがあり、部分文字列と一致しない配列内の各要素に対して「結果が見つかりません」と表示されます。コードは完全に正しいわけではありません –

1

ここで問題となるのは、部分文字列と一致しない配列内の各要素について「結果が見つかりません」ということです。たとえば、5番目の要素が一致し、最初の4つの要素が一致しない場合は、これらの4つの要素のそれぞれに「結果が見つかりません」と表示されます。いくつかの要素が見つかったかどうかを伝えるブール値を追加する方が良い。ループの後、このブール値が一致する要素が見つからなかったかどうかを確認します。その場合は、ユーザーに伝えてください。

ところで、これはデバッガを使用して見つけるのが難しくありませんでした。

関連する問題