Java 变量未初始化-虽然我是?
回答 Mike建议我在程序中添加一些代码Java 变量未初始化-虽然我是?,java,arrays,string,variables,Java,Arrays,String,Variables,回答 Mike建议我在程序中添加一些代码 default: break; 开关的一部分。我为它添加了一个例外,不需要更改任何其他内容。代码现在已成功运行谢谢大家 为可读性而编辑: 错误:“描述资源路径位置类型” 本地变量消息可能尚未初始化TweetFragment.java/Offline Twitter/src/com/deadpixels/Offline/Twitter第78行“java问题” 对于第行: int handleStartsAt = messages[i].indexOf(
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。该函数是在受控环境中调用的,这样我确信调用不会返回异常
编辑结束。
我试图创建一个返回字符串数组的方法。此字符串数组的大小将根据作为参数传递给方法的消息类型而变化。我在完成这项工作时遇到了一些问题,因为显然我没有初始化我的变量;虽然,我想我是
我遇到的变量是“messages”数组
请记住,我不能声明以下内容:
String [] messages = new String [arrayLength];
在调用的这一点上,我不知道数组的长度。我不能这样做:
String [] messages = null;
因为在这之后,我将遇到运行时错误,尽管在编译时没有收到警报
另外,为了澄清,我认为:
messages = OfflineTwitter.mentions;
上面的一行将初始化变量,“OfflineTwitter.indications”是一个数组,只存储在不同的类中
下面是代码片段
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;
}
public String[]getHandles(int-tweetType){
int arrayLength=0;
字符串[]句柄;
字符串[]消息;
开关(tweetType){
案例0:
arrayLength=OfflineTwitter.References.length;
messages=OfflineTwitter.notices;
打破
案例1:
arrayLength=OfflineTwitter.directMessages.length;
messages=OfflineTwitter.directMessages;
打破
案例2:
arrayLength=OfflineTwitter.allTweets.length;
messages=OfflineTwitter.allTweets;
违约:
打破
}
句柄=新字符串[arrayLength];
对于(int i=0;i
如果tweetType<0 | | tweetType>2
default:
break;
已到达,但未为消息指定值
您需要在default
分支中指定一个值,或抛出异常,或返回
,以便在首次使用时初始化数组
也许把它改成
default:
throw new IllegalArgumentException("Invalid tweet type : " + tweetType);
或者理想情况下,将tweetType
更改为enum
,这样您就可以详尽地涵盖所有情况
enum TweetType {
MENTIONS,
DIRECT_MESSAGES,
ALL_MESSAGES,
;
}
然后将int-tweetType
更改为tweetType-tweetType
for
循环的逻辑中存在问题。将数组设置为null
可以很好地避免编译错误。发布结果错误stacktrace以获取更多帮助。提示:编译器没有撒谎。在任何情况下,发布准确的错误消息,包括行号。你没有说是哪个错误,或者发生在哪里。请发布完整的堆栈跟踪,并在代码中指明引发异常的位置。@JimGarrison这是编译器错误,没有堆栈跟踪;-)哪一行给了您错误?然后发布错误消息并指出代码中的那一行。但在这种情况下这不是问题,因为arrayLength
将为零,循环将不会运行。@jnylen这是编译器错误,不是异常。编译器非常聪明,但它强制执行了可以轻松完成的静态分析规则。(事实上,我很确定这在JLS中作为一项要求得到了很好的定义。)因此,首先将数组设置为null
。他说这会导致一个运行时错误。@jnylen,编译器不会试图证明这一点。@jnylen这不是“当前”问题,尽管这个问题措词不当。赋值null
(首先)将消除编译器错误。。但是一个bug可能会导致运行时异常。