if-else中的嵌套do-while循环:未初始化的变量

时间:2014-07-23 09:53:19

标签: java loops initialization syntax-error nested-loops

我遇到了我在Eclipse中重复出现的错误。我认为这个错误不应该存在。给定以下嵌套循环:

String conditionlogic;
if(matcher.find())
{               
    do
        conditionogic += matcher.group();
    while(matcher.find());
}
else
    conditionogic = null;

错误是

  

可能尚未初始化局部变量conditionlogic。

我的理解是,因为do-while将至少执行一次,所以conditionlogic实际上是用一个或多个matcher.group()值初始化的,否则为null。 我该如何解决这个问题?

4 个答案:

答案 0 :(得分:3)

这一行意味着什么:

conditionogic += matcher.group();

这与:

相同
conditionogic = conditionogic + matcher.group();

即。它表示:取conditionogic的值并连接到matcher.group()。但是当你第一次进入循环时,conditionogic的值确实是未知的。您必须为此变量指定一些内容,例如空字符串:

String conditionlogic = "";

答案 1 :(得分:0)

由于您使用的是conditionogic += matcher.group();+=运算符),因此您必须使用empth String conditionlogic初始化"",如下所示:

String conditionlogic = "";

答案 2 :(得分:0)

您的案例中的问题是+=运算符。如果变量未初始化,你+=怎么办?

您可能希望将值初始化为""

答案 3 :(得分:0)

如果仔细查看代码,则会尝试将matcher.group()的结果连接到null。错误完全有效,您应该将conditionLogic初始化为""

然而,目前这不是一个非常好的练习,在循环中连接类似的字符串。正确的方法是:

String conditionLogic = null;
if(matcher.find())
{
    StringBuffer sb = new StringBuffer();
    do
    {
        sb.append(matcher.group());
    }
    while(matcher.find());
    conditionLogic = sb.toString();
}