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,可以追溯到我在The类Match ..我确切地知道了异常的含义,并且无论如何,我正在用\“ Eq1 = this.Eq1; Eq2 = this.Eq2; \”更改它们的引用。 ??     

解决方法

        您的使用两个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开头,并且大括号位于同一行中(尽管最后一部分与命名约定不相关) 我希望这有帮助。     ,        您正在调用默认构造函数
public Equipe()
,该构造函数不会初始化
VJ
。如果不打算使用构造函数,则只需删除它即可。     ,        这将解决您的问题: Match.java
private final Equipe eq1;
private final Equipe eq2;
public Match(final Equipe eq1,final Equipe eq2) 
{
   this.eq1 = eq1;
   this.eq2 = eq2;
}
    

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...