Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 尝试使搜索功能(针对每个)在未找到匹配项时打印错误消息_Java_For Loop_Cannot Find Symbol - Fatal编程技术网

Java 尝试使搜索功能(针对每个)在未找到匹配项时打印错误消息

Java 尝试使搜索功能(针对每个)在未找到匹配项时打印错误消息,java,for-loop,cannot-find-symbol,Java,For Loop,Cannot Find Symbol,我对Java非常陌生,总是犯一些小错误。我确信这只是另一个,但我真的很难理解这个概念。这就是我的代码现在的样子 public void lstMatching(String searchString) { for(String filename : files) { if(filename.contains(searchString)) { System.out.println(filename); } else{

我对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与任何文件名都不匹配时,获取打印错误消息的方法。为什么我总是收到一条错误消息,说我的“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.");
    }
}
注意以下几点:

  • invalid
    仅在
    else
    范围内已知,因此当您尝试在
    if
    语句中使用它时,它不在
    else
    范围内。有关详细说明,请参见

  • 您可以简化代码:

    public void lstMatching(String searchString)
    {
        boolean valid = false;
        for (String filename : files) {
            if (!filename.contains(searchString)) {
                // if logic here
            } else {
                // print
            }
        }
    }
    
在else部分声明“无效”变量。 如果找到该文件,则不会声明“invalid”变量,因为它不在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.");
    }
}

如果使用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.");
        }
    }

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

在for循环之前声明无效变量,并使用值true初始化它,如果在for循环中找到文件名,则只需将无效变量更改为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.");
    }
}

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

您需要在for循环之外声明
布尔无效
,否则无效变量将仅在
else
范围内可用