java NullPointerException。。我的逻辑缺陷在哪里?
总的来说:
Equipe Eq1 = new Equipe(J,E);
Equipe Eq2 = new Equipe(J,E);
while(Eq1.equals(Eq2))
Eq2 = new Equipe(J,E);
Match m = new Match(Eq1,Eq2);
String ChercherJoueur = m.QuelEquipe(m.hasBall());
课堂设备:
public Vector<Joueur> VJ;
public Equipe(Vector<Joueur> E, Vector<Entraineur> Ent) {
VJ = new Vector<Joueur>();
//rest of the logic
}
public Equipe() {
}
课堂比赛:
Equipe Eq1 = new Equipe();
Equipe Eq2 = new Equipe();
public Match(Equipe Eq1, Equipe Eq2) {
Eq1 = this.Eq1;
Eq2 = this.Eq2;
}
public String QuelEquipe(Joueur J)
{
boolean found = Eq1.ChercherJoueur(J);
if(found == true)
return "EQ1";
else
return "EQ2";
}
public Joueur hasBall()
{
Joueur J = null;
int i = 0;
boolean found = false;
NullPointerException-------> System.out.println(Eq1.VJ.get(i).isBall());
System.out.println(Eq2.VJ.get(i).isBall());
while(!found)
{
if((Eq1.VJ.get(i).isBall())==true)
{
found = true;
J= Eq1.VJ.get(i);
}
else if((Eq2.VJ.get(i).isBall())==true)
{
found = true;
J= Eq2.VJ.get(i);
}
i++;
}
return J;
}
}
我想我只需要在这里告诉你目前的情况。。当我执行“m.QuelEquipe(m.hasBall());”时,会得到一个NullPointerException这可以追溯到我在班级比赛中指出的地方。。我确切地知道异常的含义,我正在用“Eq1=this.Eq1;Eq2=this.Eq2;”更改它们的引用无论如何sooo让代码运行的流程在哪里
# 1 楼答案
使用两个参数的构造函数会初始化向量,但无参数构造函数不会
然后当你调用:
您使用的是真正的调用:
但真正的问题在于Match构造函数:
在这里,您将实例变量Eq1的值分配给局部变量Eq1,而您真正想要的是另一种方式:
顺便说一句,这不是C#在Java中,作为一种编码约定,方法和属性都以小写开头,大括号放在同一行(尽管最后一部分与命名约定没有那么大关系)
我希望这有帮助
# 2 楼答案
这将解决您的问题:
匹配。java
# 3 楼答案
您正在调用默认构造函数
public Equipe()
,它不会初始化VJ
。如果不打算使用构造函数,只需删除它即可