2013-07-17 2 views
-2

Привет всем, меня попросили написать следующий метод для домашней работы, и мне нужно уточнить. В принципе, я хочу знать, является ли параметр Comparable, заданный как параметр, частью массива сравнимыхList. Предполагая, что массив отсортирован, мне сказали прекратить проверку массива, если у сопоставимогоList есть элемент в нем, или если элемент меньше, чем следующий элемент массива. Я использовал break, но я не уверен, что если break вытащит меня из цикла for for, чтобы избежать проверки всего массива, если какое-либо из условий истинно. Я хочу убедиться, что если в массиве 50 000 элементов, и я найду элемент в позиции 5, чтобы остановить проверку остальной части массива. Я никогда раньше не использовал перерыв, поэтому не уверен, приведет ли он меня из цикла 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; 
} 
+1

Пробовали ли вы его? Что случилось? –

+2

Ну вы * попробовали * это? Да, 'break' будет работать, но вы могли бы найти это для себя. Или, желательно (IMO), просто возвращайтесь напрямую, как только вы знаете ответ - нет необходимости в переменной 'isThere'. –

+0

Код не является полным. У меня пока нет основного метода. Я пишу основной метод в конце задания, но я хочу убедиться, что эта часть права. – jorgeAChacon

ответ

4

break сломается из любого цикла, включая усиление одного. Ваше решение будет работать.

Однако, поскольку вы возвращаетесь, как только вы нашли ваш товар, вы можете изменить цикл, чтобы вернуться, как только элемент найден, или как только вы знаете, что вы не собираетесь, чтобы найти его:

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

Кроме того, поскольку массив отсортирован, линейный поиск не является вашей лучшей стратегией: реализация Binary Search может сделать ваш алгоритм значительно быстрее.

+0

Большое вам спасибо – jorgeAChacon

0

Если вы хотите знать, лучший способ остановить, когда он нашел, просто сделать это:

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; 
} 
Смежные вопросы