变量未初始化 - 虽然我是?

时间:2012-08-27 19:32:45

标签: java arrays string variables

回答

迈克建议我在

中添加一些代码
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.该函数在受控环境中调用,这样我确定调用不会返回异常。

END OF EDIT。

我正在尝试创建一个返回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;
}

2 个答案:

答案 0 :(得分:3)

如果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

答案 1 :(得分:-1)

for循环的逻辑存在问题。将数组设置为null可以很好地解决编译错误。发布生成的错误堆栈跟踪以获得更多帮助。