Eclipse为什么告诉我这是死代码?

时间:2014-10-22 11:18:52

标签: java eclipse for-loop dead-code

我正在尝试创建一个召回程序,向200多人发送短信,然后搜索回复也被转发的电子邮件。

此方法应该搜索使用其他方法构建的回复的数组列表,但它无法正常工作。只有当数组列表中的第一条消息与联系人列表中的第一个数字匹配时,它才会起作用。

这些是其他一些问题,但我的主要问题是为什么它说我的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;
        }

5 个答案:

答案 0 :(得分: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 code 的构造是for-loop头中的i++。它确实是死代码,因为for循环的主体无条件地使该方法返回。因此,&#34;步骤&#34; for header的一部分是无法访问的。

同样的事实使你的代码执行不正确,BTW。删除else条款将是一个很大的改进。

答案 1 :(得分:1)

您的循环始终从第一次迭代结束时的函数返回。这使i++死代码永不执行。

无论如何,删除else子句以修复代码。

答案 2 :(得分: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元素列表。当你获得列表中的第一个元素时,你得到if / else语句。 所以你必须要做两件事,女巫都回来了。所以你的程序将在返回的第一个元素上退出。

为简化起见,您的代码等于:

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

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

答案 3 :(得分:1)

尝试 Window&gt;偏好&gt; Java&gt;编译器&gt;错误/警告

死代码(例如'if(false)')不必要的'else'语句更改为错误。

答案 4 :(得分:0)

在其他部分,您需要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;
 }