Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.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_Scope - Fatal编程技术网

Java无法解析为变量

Java无法解析为变量,java,scope,Java,Scope,不幸的是,balUser(在第二个IF语句中)在eclipse中突出显示为“无法解析为变量”。我只是想知道我是否在什么地方做了一些不正确的语法。是的。balUser在if的范围内定义。只需在if语句之外定义它: if(text.contains(authcode) && text.contains("balance")){ String balUser = text.split("]")[0]; event.getSession().send(new Client

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

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

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));
}

您正在第一个
if
语句中声明您的
balUser
字符串
,因此它的作用域是本地的


在第一个
if
语句之外声明它,并在第二个语句中检查
null
s以消除此问题。

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

如果希望在其他地方知道它,则需要在两个块都可以看到的地方声明它

就你而言:

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

您在第一条if语句中声明了变量
balUser
,因此它的作用域就是第一条if语句。如果要在其他地方使用它,应该在if语句之外声明它

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));
}

检查您的代码结构:

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));
}
我希望现在很明显,变量在第一个块中声明,在第二个块中引用,而第二个块中不存在该变量。通常,java和所有c类语言中所有标识符的范围都受到一对周围的
{
}
的限制。但是,内部范围可以从外部范围看到标识符,因此此代码是正确的:

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

您仅在第一个
if
语句中声明了
balUser
——第二个语句不在范围内。请在发布问题时格式化您的代码——从阅读您的问题并可能想回答问题的人的角度考虑。你的帖子是他们想看的格式吗?如果没有,请修复它。(在这种情况下,它肯定不是…)谢谢,这正是我想要的。九分钟后回来选择答案!唯一的问题是,这段文本位于另一个运行多次的if语句中,因此每次它都会将我的变量重置回null(这很糟糕)。是否有一种方法可以在if语句外部设置变量并在内部访问它?是的。同样,只需定义
字符串balUser=null在顶级if语句之外。
int i = 5;
{
   int j = i;
}