2014-10-22 3 views
0

Я пытаюсь создать программу отзыва, которая отправляет текстовые сообщения 200 + людям, а затем выполняет поиск по электронной почте, в которой также отправляются ответы.Почему Eclipse говорит мне, что это мертвый код?

Этот метод предназначен для поиска списка ответов, который создается с использованием другого метода, но он работает неправильно. Он будет работать, только если самое первое сообщение в списке массивов совпадает с самым первым номером в списке контактов.

Это некоторые другие проблемы, но мой главный вопрос здесь в том, почему он говорит, что код, специфически внутри моего цикла for, является мертвым кодом?

public static boolean searchForPhone(String phone){ 
     CharSequence phoneN = phone; 
     for(int i=0;i<myMessages.size();i++){ 
       if(myMessages.get(i).contains(phone)){ 
        return true; 
       } 
       else{ 
        return false; 
       } 
     } 
     return false; 
     } 
+0

Общий комментарий: Я предлагаю вам использовать расширенный цикл для чтения: для (String message: myMessages) { –

+0

И у вас здесь серьезная ошибка. Вы не должны возвращать false из цикла. –

ответ

1

В остальное части вам нужно continue искать. Иначе, если ваш кулачный элемент не соответствует, он вернет false и не будет проверять другой элемент.

public static boolean searchForPhone(String phone) { 
    CharSequence phoneN = phone; 
     for (int i = 0; i < myMessages.size(); i++) { 
      if (myMessages.get(i).contains(phone)) { 
      return true; 
      } else { 
      //return false this conditional return cause 
      // the complain it as dead code. Since for loop will become not 
      //loop 
      continue; // will search for other elements. 
      } 
     } 
     return false; 
} 

Теперь вы можете упростить этот код, чтобы следующий, потому что else часть не является действительно необходимым.

public static boolean searchForPhone(String phone) { 
    CharSequence phoneN = phone; 
    for (int i = 0; i < myMessages.size(); i++) { 
     if (myMessages.get(i).contains(phone)) { 
      return true; 
     } 
    } 
    return false; 
} 
+1

удаление еще удаляет все беспорядок: D –

+1

Нет смысла держать это в другом месте – Eypros

+2

Я не вижу ответа на конкретный вопрос OP о мертвом коде. –

1

Ваша петля всегда возвращается из функции в конце первой итерации. Это делает i++ мертвым кодом, так как он никогда не выполняется.

В любом случае, удалите пункт else, чтобы исправить код.

+0

@Naveen Вот что. Есть вероятность, что никоим образом не войдет в цикл. Следовательно, должно быть возвращено значение по умолчанию. Попробуй. NPE получил фактическую точку. +1. –

+0

Цикл никогда не завершит первую итерацию из-за операторов 'return' в обеих частях' if' и 'else'. Таким образом, код после этого (особенно оператор * increment * заголовка цикла) мертв, а не код после цикла (потому что если 'mMessages.size()' возвращает 0, цикл не будет выполнен, а ** код после цикла ** будет). – ifloop

1

Будет ли это помогать?

public static boolean searchForPhone(String phone){ 
    CharSequence phoneN = phone; 
    for(int i=0;i<myMessages.size();i++){ 
      if(myMessages.get(i).contains(phone)){ 
       return true; 
      } 
    } 
    return false; 
    } 

Посмотрите, что вы перебираете n-элементный список. Когда вы получите первый элемент в списке, который вы получили, если/else. Таким образом, вы будете иметь дело с двумя вещами, ведьма ведьма возвращается. Таким образом, ваша программа выйдет из первого возвращенного элемента.

Чтобы сделать это проще, ваш код равен:

CharSequence phoneN = phone; 
if (myMessages.size() ==0){ 
return false; 
} 

return myMessages.get(0).contains(phone); 
2

Это ваш код, правильно отформатирован:

public static boolean searchForPhone(String phone) { 
    for (int i = 0; i < myMessages.size(); i++) { 
    if (myMessages.get(i).contains(phone)) { 
     return true; 
    } else { 
     return false; 
    } 
    } 
    return false; 
} 

Конструкт помечено как Dead кода является корзины в i++ for-loop header. Это действительно мертвый код, потому что тело for цикла безоговорочно возвращает метод. Поэтому «шаговая» часть заголовка для заголовка недоступна. Мертвый.

Тот же факт делает ваш код неправильным, BTW. Извлечение оговорки else будет большим улучшением.

+0

+1 для уточнения инструкции * приращения * часть заголовка цикла как область мертвого кода – ifloop

1

Try из Window> Preferences> Java> Compiler> Error/Предупреждения

Изменить Мертвый код (например 'если (ложь)') и Ненужные 'еще' заявление к ошибке.