在主要:
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;
}
}
我想只需要在这里包含这些信息即可通知您。我可以确切地知道异常的含义,并且我用“ Eq1 = this.Eq1; Eq2 = this.Eq2;”来更改它们的引用。无论如何.. sooo哪里有代码在起作用?
最佳答案
您的构造函数使用两个args会初始化向量,但无参数构造函数不会
public Equipe(Vector<Joueur> E, Vector<Entraineur> Ent) {
VJ = new Vector<Joueur>(); //<-- OK
//rest of the logic
}
public Equipe() {
//<-- errrk
}
然后,当您调用时:
System.out.println(Eq2.VJ.get(i).isBall());
您正在使用真正的调用:
Eq2.null.get <-- NullPointerException
但是真正的问题是在Match构造函数中:
public Match(Equipe Eq1, Equipe Eq2) {
Eq1 = this.Eq1;
Eq2 = this.Eq2;
}
在这里,您要为本地变量Eq1分配您确实想要的实例变量Eq1的值,反之亦然:
public Match(Equipe Eq1, Equipe Eq2) {
this.Eq1 = Eq1;
this.Eq2 = Eq2;
}
顺便说一句,这不是C#,并且在Java中,作为一种编码约定,方法和属性均以lowecase开头,并且大括号位于同一行中(尽管最后一部分与命名约定不相关)
我希望这有帮助。
关于java - NullPointerException ..我的逻辑缺陷在哪里?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6362053/