2

为总的菜鸟问题道歉,但任何人都可以解释match在 for-each 循环以下列方法完成后的值发生了什么?

尝试编译会产生警告:variable match might not have been initialised.

public void listMatching(String searchString) {
boolean match;

for(String filename : files) {
    if(filename.contains(searchString)) {
        System.out.println(filename);
        match = true;
    }
    else {
        match = false;
    }
}

if(match == false) {
    System.out.println("No matches found for " + searchString);
}
}
4

5 回答 5

3

首先你需要定义boolean match = false;

此外,一旦找到匹配项,您需要从循环中中断,match否则状态将被覆盖。

 if(filename.contains(searchString)) {
        System.out.println(filename);
        match = true;
        break;
    } // this wil help whether a match is found or not

如果您有兴趣查找匹配数 int counter = 0; if(filename.contains(searchString)) { System.out.println(filename); 匹配=真;计数器++;} // 这将有助于找到匹配的数量

最后System.out.println("number of matches for"+searchString+" : "+counter);

于 2013-01-28T07:12:47.720 回答
3

这是一个修复程序,可以满足您的要求:

public void listMatching(String searchString) {
    boolean match = false; // initialize local variable
    for(String filename : files) {
        if(filename.contains(searchString)) {
            System.out.println(filename);
            match = true;
        }
    }
    if(!match) { // same as 'match == false', just without comparison
        System.out.println("No matches found for " + searchString);
    }
}

必须初始化局部变量。只有字段获得其类型的默认值。

如果您在块中match重新分配,它将在循环之后,即使每个包含除了最后一个。falseelsefalsefilenamesearchString

于 2013-01-28T07:19:07.143 回答
0
  1. 当你找到你的匹配项时,你需要打破循环。

  2. 你需要初始化你找到的变量,你也不能运行你的循环,然后你的 if 条件会查看一个未初始化的变量,这就是你的编译器想要告诉你的

于 2013-01-28T07:15:05.767 回答
0

将变量初始化为 false 以避免程序中出现警告。

此外,match它是单个变量,根据各种文件的内容(搜索相同的字符串),您将 true 或 false 分配给同一个变量。

的最终布尔值match只是在文件列表的最后一个文件中搜索字符串的结果。

于 2013-01-28T07:18:55.243 回答
0

它可能文件数组是空的,所以你应该为匹配变量设置默认值;

boolean match=false;

for(String filename : files) {
    if(filename.contains(searchString)) {
        System.out.println(filename);
        match = true;
        break;
    }
}

如果您需要检查所有文件是否都有此搜索字符串,您可以使用此代码:

boolean match=files.lenght!=0;

for(String filename : files) {
    if(!filename.contains(searchString)) {
        System.out.println(filename);
        match = false;
        break;
    }
}
于 2013-01-28T07:22:29.293 回答