簡體   English   中英

使用中斷退出增強的for循環

[英]Using a break to get out of an enhanced for loop

大家好,我被要求寫以下作業方法,我需要澄清一下。 基本上我想知道作為參數給出的Comparable項是否是compareableList數組的一部分。 假設對數組進行排序,則告訴我停止檢查其中的可比列表中是否包含該項,或者該項目小於數組中的下一項。 我使用break,但是我不確定break是否會讓我脫離增強的for循環,從而避免在任何條件為真的情況下檢查整個數組。 我想確保數組中是否有50,000個項目,並且在第5位找到該項目以停止檢查數組的其余部分。 我以前從未使用過break,所以我不確定是否會讓我脫離for循環。

public boolean contains(Comparable item) {

    Comparable[] comparableList= getStore();
    boolean isThere = false;
    for(Comparable p : comparableList)
    {
        if(item.compareTo(p)==0)
        {
            isThere = true;
            break;
        }
        if(item.compareTo(p)<0)
        {

            break;
        }

    }
    return isThere;
}

break將打破任何循環,包括增強循環。 您的解決方案將起作用。

但是,由於您將在找到商品后立即返回,因此可以將循環更改為在找到該商品后立即返回,或者在知道將不會找到該物件時立即返回:

Comparable[] comparableList= getStore();
for(Comparable p : comparableList) {
    if(item.compareTo(p)==0) {
        return true;
    }
    if(item.compareTo(p)<0) {
        return false;
    }
}
return false;

此外,由於數組已排序,因此線性搜索不是您的最佳策略:實施二進制搜索可以使您的算法明顯更快。

如果您想知道找到后停止的最佳方法,請執行以下操作:

public boolean contains(Comparable item) {

Comparable[] comparableList= getStore();
    for(Comparable p : comparableList)
     {
        if(item.compareTo(p)==0)
        {
            return true;
        }
        if(item.compareTo(p)<0)
        {
         return false;
        }

    }
    return false;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM