0

我对 Java 很陌生,并且一直在犯一些小错误。我确定这只是另一个,但我很难理解这个概念。这就是我的代码现在的样子。

public void lstMatching(String searchString)
{
    for(String filename : files) {
        if(filename.contains(searchString)) {
            System.out.println(filename);
        }
        else{
            boolean invalid = true;
        }
    }
    if(invalid){
            System.out.println("Your search did not match any results.");
    }
}

我试图做的是在 searchString 不匹配单个文件名时获取打印出我的错误消息的方法。为什么我不断收到错误消息说我的“无效”变量是错误的?

4

5 回答 5

1

您需要invalid在循环之前声明您的变量。此外,您似乎已经颠倒了您的逻辑。您只需要满足一个匹配项,因此您应该在找到匹配项时更新变量:

public void lstMatching(String searchString)
{
    boolean invalid = true;
    for(String filename : files) {
        if(filename.contains(searchString)) {
            System.out.println(filename);
            invalid = false;
        }
    }
    if (invalid){
            System.out.println("Your search did not match any results.");
    }
}
于 2015-10-06T08:34:53.657 回答
1

“无效”变量在 else 部分中声明。如果找到该文件,则不会声明“无效”变量,因为它不会进入 else 部分)。并且您正在尝试使用该变量来检查是否找到了文件。

public void lstMatching(String searchString)
{
    boolean invalid = false;

    for(String filename : files) {
        if(filename.contains(searchString)) {
            System.out.println(filename);
        }
        else{
            invalid = true;
        }
    }
    if(invalid){
            System.out.println("Your search did not match any results.");
    }
}
于 2015-10-06T08:40:03.547 回答
0

请注意以下事项:

  • invalid仅在else范围内是已知的,因此当您尝试在if语句中使用它时 - 在else范围之外,它是未知的。有关详细说明,请参阅The Java™ 教程 - 变量

  • 您可以简化代码:

    public void lstMatching(String searchString)
    {
        boolean valid = false;
        for (String filename : files) {
            if (!filename.contains(searchString)) {
                // if logic here
            } else {
                // print
            }
        }
    }
    
于 2015-10-06T08:38:13.167 回答
0

如果您使用 JDK8,只需几行代码即可:

public void lstMatching(String searchString) {
        if (Arrays.asList(files).stream().anyMatch(s -> s.contains(searchString))) {
            System.out.println("Your search matched");
        } else {
            System.out.println("Your search did not match any results.");
        }
    }
于 2015-10-06T08:58:06.933 回答
0

由于 else 块,您面临的第一个问题,因为 for 循环将检查所有文件,如果您的文件位于文件名之间,它仍将返回 true(因为 inValid 变量值将始终依赖于 last 的名称文件,如果姓氏不匹配,则 inValid 将为真,否则为假)。

在 for 循环之前声明 inValid 变量并使用值 true 初始化它,如果它找到文件的名称,则在 for 循环中初始化它,然后只需将 inValid 变量更改为 true 并中断,因为您不需要进一步检查。

public void lstMatching(String searchString)
{
    boolean invalid = true;
    for(String filename : files) {
        if(filename.contains(searchString)) {
            System.out.println(filename);
            invalid = false;
            break;
        }
    }
    if (invalid){
            System.out.println("Your search did not match any results.");
    }
}

如果您发现任何困难,请通过下面的评论告诉我。

于 2015-10-06T10:31:33.653 回答