如何正确使用这个布尔值?

时间:2015-06-18 02:40:57

标签: java

我正在制作一个IRC机器人。如果有人输入"!tell username:message"我希望能够看到用户是否在线。这是我的代码的第一部分,它通过频道中的用户查看并检查用户是否已经在线:

if (messageIC.startsWith("!tell ")) {
    boolean userIsOnChannel;
    String messagey = message.substring(6);
    String[] messager = messagey.split(":");
    String username = messager[0];
    User[] users = getUsers(channel);
    for (final User user : getUsers(channel)) {
        if (user.getNick().equalsIgnoreCase(username)) {
            userIsOnChannel = true;
            sendMessage(channel, username + " is online now!");
            break;
        }
        else {
            userIsOnChannel = false;
        }
    }

}

因此,当我在NetBeans中使用它时,它告诉我从不使用变量userIsOnChannel。我以为我在if / else语句中使用过它。这会产生问题,因为我希望能够存储用户的消息,然后发送一些类似于&#34的内容;我会将其传递给"如果布尔值返回false,则返回通道。当我尝试使用布尔值时,我得到一个从未初始化的错误。我做错了什么?

4 个答案:

答案 0 :(得分:5)

一旦代码块完成,该变量就会超出范围。您通过设置“使用”它,但您从不使用它作为布尔值(您永远不会检查值。

您可能需要更改

if (messageIC.startsWith("!tell ")) {
boolean userIsOnChannel;

boolean userIsOnChannel = false;
if (messageIC.startsWith("!tell ")) {

以便 userIsOnChannel 在该代码块之后可用。

你得到的“可能尚未初始化”因为它只是通过编写

而得不到值
boolean userIsOnChannel;

你需要为它分配一个值(在这种情况下可能是假的)..

答案 1 :(得分:2)

如果默认布尔值为“false”,则将其初始化为false并删除else块。

if (messageIC.startsWith("!tell ")) {
    boolean userIsOnChannel = false;
    String messagey = message.substring(6);
    String[] messager = messagey.split(":");
    String username = messager[0];
    User[] users = getUsers(channel);
    for (final User user : getUsers(channel)) {
        if (user.getNick().equalsIgnoreCase(username)) {
            userIsOnChannel = true;
            sendMessage(channel, username + " is online now!");
            break;
        }

    }

}

答案 2 :(得分:0)

您需要使用某些东西或返回该字段。

如果为字段添加getter方法,则警告应该消失。

getUserIsOnChannel(){
return userIsOnChannel;
}

答案 3 :(得分:0)

在这里,我将尝试通过评论以简单的方式解释它。

boolean userIsOnChannel;
// at this place userIsChannel is undefinded and definitely you will 
// try to get its value.
for(....) {
    if(condition) {
        userIsOnChannel = ...
    } else {
        userIsOnChannel = ...
    }
    // Here you will not get any error if you use userIsOnChannel
    // because it is obvious that if if statement is not satisfied
    // then else will be and userIsOnChannel will definitely be assigned.
}
// But here you will again get error because it compiler again here cannot
// confirm that the userIsOnChannel has a value (may be for statement not run even 1 time

因此,在使用变量之前,必须初始化变量,编译器可以确认它的值将被赋值。