2012-12-19 26 views
5

Tôi đang tái cấu trúc một phương pháp rất lớn với rất nhiều sự lặp lại trong đó.Break trong một phương pháp được gọi là từ một vòng lặp

Trong phương pháp này có rất nhiều vòng lặp while trong đó bao gồm:

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

tôi muốn trích xuất này như một phương pháp, bởi vì nó xảy ra 3 lần trong một phương pháp này hiện nay, nhưng khi tôi làm như vậy tôi nhận được một lỗi khi ngắt vì nó không còn trong vòng lặp. Vấn đề là nó vẫn cần thiết để thoát ra khỏi vòng lặp while, nhưng chỉ khi đạt đến số lượng kết quả tối đa.

Mọi đề xuất?

+2

Tại sao không chỉ đơn giản là trở lại? –

Trả lời

3

Giả sử phương pháp này là: Phương pháp

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; 
} 

Gọi từ vòng lặp như:

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

Cảm ơn rất nhiều, tôi đã bỏ lỡ điều hiển nhiên. – Carasel

+0

Đôi khi điều đó xảy ra :) Rất vui được trợ giúp. – Amber

3

Điều này không thể thực hiện trực tiếp.

Thông thường bạn muốn phá vỡ vì bạn đã tìm thấy giải pháp và không còn phải tìm kiếm. Vì vậy, chỉ ra trong các chức năng được gọi là có/đã thành công, ví dụ bằng cách trả về một kết quả hoặc một boolean để chỉ ra sự thành công. Và nếu hàm trả về thành công, sau đó ngắt.

+0

Thậm chí nếu có thể, mã sẽ không thể hiểu được. – jmrodrigg

+0

Không hề. Hàm này nhận nhiệm vụ (ví dụ như quyết định xem hành động đã thành công hay đủ và thực hiện một hành động khi nó) và kết quả của việc đó được sử dụng để ngừng tìm kiếm. – Thirler

+0

Cảm ơn Thirler, chỉ là những gì tôi cần. – Carasel

0

Cố gắng phá vỡ vòng lặp trong phương thức sử dụng trả lại;

0

Vì Thriler cho biết bạn không thể thực hiện trực tiếp. Bạn có thể trích xuất một phần của nó để phương pháp này và làm điều gì đó như:

if(isTooManyResults(count)) { break; } 

Rõ ràng phương pháp isTooManyResults của bạn sẽ cần phải trả lại true nếu có quá nhiều kết quả và false khác

1

Nếu nó bây giờ là trong vòng một phương pháp thay vì vòng lặp while, nó trả về một giá trị và sau đó ngắt dựa trên đó.

ví dụ:

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; 
} 
Các vấn đề liên quan