回答
迈克建议我在
中添加一些代码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;
}
答案 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
可以很好地解决编译错误。发布生成的错误堆栈跟踪以获得更多帮助。