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个答案)
去年关闭。
已回答
迈克建议我在其中添加一些代码
开关的一部分。我为其添加了一个例外,无需更改其他任何内容。该代码现在可以成功运行。谢谢你们!
编辑以提高可读性:
错误:“描述资源路径位置类型
本地变量消息可能尚未初始化TweetFragment.java / Offline Twitter / src / com / deadpixels / offline / twitter第78行Java问题”
对于行:
同样的错误在第80行发生两次,即:
至于您的问题,
添加了一行,因为int tweet类型只能为0、1或2。该函数在受控环境中调用,因此我确定该调用不会返回异常。
编辑结束。
我正在尝试创建一种返回String数组的方法。此String数组的大小将根据作为参数传递给方法的消息类型而改变。我在完成此操作时遇到了一些问题,因为显然我没有初始化变量。虽然,我想我是。
我遇到的变量是“ messages”数组。
请记住,我无法声明以下内容:
到目前为止,在调用中,我不知道数组的长度。我不能这样做:
从那以后,尽管在编译时没有收到警报,我仍会遇到运行时错误。
另外,为了澄清起见,我会这样做:
上一行将初始化变量,“ OfflineTwitter.mentions”是一个数组,仅存储在不同的类中。
这是代码片段。
已达到,未为
您需要在
也许将其更改为
或理想情况下将
并将
(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