由于某种原因 "else if" 循环,我的对象无法初始化

My object cannot be initialized because of the "else if" loop for some reason

我试图通过基于模初始化我的怪物对象来将三种怪物添加到一个数组中。 (我只是一个初学者,所以请多多包涵)。

for (int i=0; i<nrofMonsters; i++) {
    Monster m;
    if (i%2==0) { 
        m = new Vampire("Vamp-"+i);
    } else if(i%2==1) {
        m = new Ghost("Ghost-"+i);
    } else if(i%3==2){
        m = new Demon("Demon-"+i);
    }
    monsters.add(m);
}

错误消息:变量 m 可能尚未初始化。

if else 阶梯从上到下。当您基于模 2 删除时,您只能有 2 个结果 0 或 1。因此您永远不会达到 i%3。您可以根据 3 删除所有内容,您将有 3 个结果。

如下所述,我不认为这是一个初始问题 - 你能分享你正在编写的语言吗?(并检查继承树 - 当你是初学者时,那里可能会有一些严重的错误)

错误消息非常清楚:在 monsters.add(m); 中访问特定值之前,您的代码中存在可能不会导致将特定值分配给 m 的执行路径声明。

具体来说,在 if-else if 链中没有最终 else 分配其他值:

if (i%2==0) { 
    m = new Vampire("Vamp-"+i);
} else if(i%2==1) {
    m = new Ghost("Ghost-"+i);
} else if(i%3==2){
    m = new Demon("Demon-"+i);
}
else {
    m = …whatever…; // or, handle this as an error
}
monsters.add(m);

请注意,编译器(显然)不够聪明,无法理解 if 中的条件,因此无法判断 else 部分不是必需的。


认为你,事实上,想要这样的东西:

if(i%3==2){
    m = new Demon("Demon-"+i);
} else if (i%2==0) { 
    m = new Vampire("Vamp-"+i);
} else {
    m = new Ghost("Ghost-"+i);
} 

变量'm'是局部变量。 必须初始化局部变量。 否则一定会导致编译错误。

像下面这样的简单分配将解决问题:

怪物m = null;

尽管上述赋值会导致 NullPointerException,因为代码可能无法到达任何 'if' 或 'else if' 构造。

因此最好添加'else'构造以确保代码成功运行。