Java中的布尔值赋值

时间:2013-01-28 07:11:43

标签: java boolean

对总noob问题抱歉,但是有人可以解释在for-each循环完成后,match的值在以下方法中发生了什么吗?

尝试编译会产生警告: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);
}
}

5 个答案:

答案 0 :(得分: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(文件名);             match = true;             计数器++;         } //这将有助于找到匹配数

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

答案 1 :(得分:2)

这是一个可以按照您的要求执行的修复:

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块中将false重新分配给else,则在循环后它将为false,即使每个filename包含{{1}除了最后一个。

答案 2 :(得分:0)

  1. 您需要在找到匹配项时打破循环。

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

答案 3 :(得分:0)

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

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

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

答案 4 :(得分: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;
    }
}