[英]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.