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中突出显示为“无法解析为变量”。我只是想知道我是否在某处做了一些不正确的语法。
答案 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;
}