This question already has an answer here:
Why do I get a “variable might not have been initialized” compiler error in my switch block?
                                
                                    (1个答案)
                                
                        
                去年关闭。
            
        

已回答

迈克建议我在其中添加一些代码

default:
break;


开关的一部分。我为其添加了一个例外,无需更改其他任何内容。该代码现在可以成功运行。谢谢你们!



编辑以提高可读性:

错误:“描述资源路径位置类型
本地变量消息可能尚未初始化TweetFragment.java / Offline Twitter / src / com / deadpixels / offline / twitter第78行Java问题”

对于行:

int handleStartsAt = messages[i].indexOf('@');


同样的错误在第80行发生两次,即:

ph = messages[i].substring(handleStartsAt, messages[i].length());


至于您的问题,

default:
break;


添加了一行,因为int tweet类型只能为0、1或2。该函数在受控环境中调用,因此我确定该调用不会返回异常。

编辑结束。

我正在尝试创建一种返回String数组的方法。此String数组的大小将根据作为参数传递给方法的消息类型而改变。我在完成此操作时遇到了一些问题,因为显然我没有初始化变量。虽然,我想我是。

我遇到的变量是“ messages”数组。

请记住,我无法声明以下内容:

String [] messages = new String [arrayLength];


到目前为止,在调用中,我不知道数组的长度。我不能这样做:

String [] messages = null;


从那以后,尽管在编译时没有收到警报,我仍会遇到运行时错误。

另外,为了澄清起见,我会这样做:

messages = OfflineTwitter.mentions;


上一行将初始化变量,“ OfflineTwitter.mentions”是一个数组,仅存储在不同的类中。

这是代码片段。

public String[] getHandles (int tweetType) {

    int arrayLength = 0;
    String [] handles;
    String [] messages;

    switch (tweetType) {
    case 0:
        arrayLength = OfflineTwitter.mentions.length;
        messages = OfflineTwitter.mentions;
        break;
    case 1:
        arrayLength = OfflineTwitter.directMessages.length;
        messages = OfflineTwitter.directMessages;
        break;
    case 2:
        arrayLength = OfflineTwitter.allTweets.length;
        messages = OfflineTwitter.allTweets;
    default:
        break;
    }

    handles = new String [arrayLength];

    for (int i = 0; i < arrayLength; i++) {
        int handleStartsAt = messages[i].indexOf('@');
        String ph = "";
        ph = messages[i].substring(handleStartsAt, messages[i].length());
        int handleEndsAt = ph.indexOf(":");
        String sender = ph.substring(0, handleEndsAt);
        handles[i] = sender;
    }

    return handles;
}

最佳答案

如果tweetType < 0 || tweetType > 2

default:
    break;


已达到,未为messages分配值。

您需要在default分支中分配一个值,或者在throw一个异常中或在return中分配一个值,以便在首次使用时初始化该数组。

也许将其更改为

default:
    throw new IllegalArgumentException("Invalid tweet type : " + tweetType);


或理想情况下将tweetType更改为enum,以便您可以详尽地涵盖所有情况。

enum TweetType {
  MENTIONS,
  DIRECT_MESSAGES,
  ALL_MESSAGES,
  ;
}


并将int tweetType更改为TweetType tweetType

关于java - 变量未初始化-虽然我是? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12148387/

10-13 00:34