Java无法解析为变量

时间:2014-08-07 15:57:42

标签: java scope

if(text.contains(authcode) && text.contains("balance")){
    String balUser = text.split("]")[0];
    event.getSession().send(new ClientChatPacket("/money"));
}
if(text.contains("Balance: $")){
    text = text.split(": ")[1];
    try {
        Thread.sleep(2000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    event.getSession().send(new ClientChatPacket("/m " + balUser + text));
}

不幸的是,balUser(在第二个IF语句中)在eclipse中突出显示为“无法解析为变量”。我只是想知道我是否在某处做了一些不正确的语法。

5 个答案:

答案 0 :(得分:1)

是。 balUser的定义在if的范围内。只需在if语句之外定义它:

String balUser = null;
if(text.contains(authcode) && text.contains("balance")) {
    balUser = ....
}

答案 1 :(得分:0)

您在第一个balUser语句中声明了String if,因此它的作用域是本地的。

在第一个if语句之外声明它,并在第二个语句中检查null s以使其消失。

答案 2 :(得分:0)

您的变量String balUser在一对花括号内声明,因此它的范围仅限于该代码块。

如果你想在其他地方知道它,你需要声明它可以被两个块看到。

在你的情况下:

String balUser = null; // variable declared here
if(text.contains(authcode) && text.contains("balance")){
    balUser = text.split("]")[0]; // remove declaration, just assignation
    event.getSession().send(new ClientChatPacket("/money"));
}
    if(text.contains("Balance: $")){
        text = text.split(": ")[1];
        try {
            Thread.sleep(2000);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    event.getSession().send(new ClientChatPacket("/m " + balUser + text));
}

答案 3 :(得分:0)

您在第一个if语句中声明了变量balUser,因此其范围是第一个if语句。如果你想在别处使用它,你应该在if语句之外声明它。

String balUser = null;
if(text.contains(authcode) && text.contains("balance")){
    balUser = text.split("]")[0];
    event.getSession().send(new ClientChatPacket("/money"));
}
if(text.contains("Balance: $")){
    text = text.split(": ")[1];
    try {
        Thread.sleep(2000);
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    event.getSession().send(new ClientChatPacket("/m " + balUser + text));
}

答案 4 :(得分:0)

检查您的代码结构:

if() {
    String balUser = ...;
} else {
    event.getSession().send( ...   balUser);
}

我希望现在很明显变量是在第一个块中声明的,并且在第二个块中被引用,它不存在。通常,java和所有类c语言中所有标识符的范围都受到一对周围{}的限制。但是内部范围可以看到外部范围的标识符,所以这段代码是正确的:

int i = 5;
{
   int j = i;
}