2012-12-19 12 views
5

非常に大きなメソッドを繰り返しリファクタリングしています。ループから呼び出されたメソッドを中断する

方法では、多くのがありますが含まwhileループ:

if (count > maxResults){ 
     // Send error response 
     sendResponse(XMLHelper.buildErrorXMLString("Too many results found, Please refine your search"), out, session); 
     break; 

は、私はそれが現在、この一つの方法では3回起こるので、方法としてこれを抽出したいが、私はそうするとき、私は取得ループ内に存在しなくなったため、ブレークにエラーが発生しました。問題は、結果の最大数に達したときだけwhileループから抜け出す必要があることです。

提案がありますか?

+2

なぜ単に戻りませんか? –

答えて

3

メソッドがあると仮定:ループから

public boolean test(int count, int maXResult) { 
if (count > maxResults) { 
     // Send error response 
     sendResponse(XMLHelper.buildErrorXMLString("Too many results found, Please refine your search"), out, session); 
     return true; 
     } 
return false; 
} 

Callメソッドとして:

while(testCondition) { 
    if (test(count, maxResults)) { 
    break; 
    } 
} 
+0

ありがとう、私は明らかに欠けていた。 – Carasel

+0

それは時々起こる:)喜んで助けてください。 – Amber

3

これは直接行うことはできません。

ソリューションを見つけて検索する必要がないため、ほとんどの場合、中断したいと思っています。それで、成功したかどうかを、例えば、結果を返すか、成功を示すブール値を返すなどして、呼び出された関数に示します。関数が成功を返した場合は、中断します。

+0

可能であっても、コードは理解できません。 – jmrodrigg

+0

全くありません。この関数はタスクを実行します(たとえば、アクションが成功したかどうかを判断し、成功した場合はアクションを実行します)、その結果を使用して探しを停止します。 – Thirler

+0

ありがとうThirler、ちょうど私が必要なもの。 – Carasel

0

returnを使用してメソッド内のループを解除してください。

0

Thrilerは、あなたはそれを直接行うことはできないと言います。もちろん、あなたのisTooManyResults方法は、それがメソッド内で、今の場合はあまりにも多くの結果がある場合truefalseそう

1

を返却する必要があるだろう

if(isTooManyResults(count)) { break; } 

:あなたはメソッドにその一部を抽出し、のようなものを行うことができますwhileループの代わりに値を返してからそれに基づいてブレークします。

すなわち

public bool refactoredMethod(parameters) 
{ 
    if (count > maxResults){ 
    // Send error response 
    sendResponse(XMLHelper.buildErrorXMLString("Too many results found, Please refine your  search"), out, session); 

    return true; 
    } 

    return false; 
} 
関連する問題