使用if和else语句

时间:2016-05-20 06:39:36

标签: java if-statement

所以我有这个方法显示任何包含匹配子字符串(不区分大小写)的名称,并将匹配的名称输出到JTextArea。它从已存储为数组的输入文件中搜索名称。但如果我想显示"没有找到结果"当用户输入文件中不存在的内容时,它会显示"未找到结果"对于一切,甚至是存在的名称。如果我拿

 else
    displayArea.append("\n No results found");

声明我的方法再次正常工作并显示正确的信息。那么如何让它显示"没有找到结果"没有导致我的if语句停止工作?

private void match(String targetSubstring)
  {
    displayArea.setText("");
    displayArea.append("FIND RESULTS for: " + targetSubstring);
    displayArea.append("\n");
    displayArea.append("\n Name               Best Decade");
    displayArea.append("\n---------------         ---------------");
    targetSubstring = targetSubstring.toUpperCase();
    for (int i = 0; i < namesArray.length; i++) {
      String theName = namesArray[i].getName();
      if (theName.toUpperCase().contains(targetSubstring))
      {
        displayArea.append("\n"  + namesArray[i].getName() + "\t" + namesArray[i].bestDecade());
      }
      else 
        displayArea.append("\n No results found");
    }
  }

3 个答案:

答案 0 :(得分:6)

此代码存在逻辑错误。

需要重写为:

// flag to see if any matches are found
boolean foundSomething = false;

for (int i = 0; i < namesArray.length; i++) {
     String theName = namesArray[i].getName();
     if (theName.toUpperCase().contains(targetSubstring))
     {
         displayArea.append("\n"  + namesArray[i].getName() + "\t" + namesArray[i].bestDecade());
         foundSomething = true;
     }
}

// Now, if you didn't find anything, then add this
if (!foundSomething) { 
      displayArea.append("\n No results found");
}

<强>原因: 在for循环中使用else case将附加&#34;未找到结果&#34;任何时候namesArray中的单个索引都找不到匹配。

答案 1 :(得分:1)

问题是:namesArray真的包含targetSubstring吗?在我看来,你应该从提取开始

if (theName.toUpperCase().contains(targetSubstring))
{
    displayArea.append("\n"  + namesArray[i].getName() + "\t" + namesArray[i].bestDecade());
}
else 
    displayArea.append("\n No results found");

对于新方法并编写一些简单的测试 - 这个条件是否正确?

如果测试说条件没问题,那么你应该调试这部分代码,看看namesArray中的数据有什么问题。因为此时代码看起来很好。

答案 2 :(得分:1)

问题在于,您正在打印&#34;未找到任何结果&#34;对于数组中的每个元素与子字符串不匹配。例如,如果第五个元素匹配,但不匹配前四个元素,则将打印&#34;未找到结果&#34;对于这四个要素中的每一个最好添加一个布尔值,告诉你是否找到了某个元素。循环之后,检查此布尔值是否告诉您没有找到匹配的元素。在这种情况下,告诉用户。

BTW:使用调试器很难找到。