NullPointerException .. Где недостаток в моей логике? - PullRequest
1 голос
/ 15 июня 2011

В основном:

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());

В классе Equipe:

public Vector<Joueur> VJ;
public Equipe(Vector<Joueur> E, Vector<Entraineur> Ent) {
   VJ = new Vector<Joueur>();
   //rest of the logic
}
public Equipe() {
}

В классе Match:

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;
}
}

Я думаю, это все, что мне нужно включить сюда, чтобы проинформировать вас о ситуации. Я получаю исключение NullPointerException, когда выполняю "m.QuelEquipe (m.hasBall ());" это можно проследить до того места, где я указывал в «Совпадении классов». Я точно знаю, что означает исключение, и я изменяю их ссылки на «Eq1 = this.Eq1; Eq2 = this.Eq2;» в любом случае .. тааак где поток, чтобы заставить код работать ??

Ответы [ 3 ]

3 голосов
/ 15 июня 2011

Ваш конструктор, использующий два аргумента, инициализирует вектор, но конструктор без параметров не

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 

Но проблема real в конструкторе 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 как соглашения о кодировании и методы, и атрибуты начинаются со строчной буквы, а открывающая скобка идет в одной строке (хотяэта последняя часть не так важна, как соглашение об именах)

Надеюсь, это поможет.

3 голосов
/ 15 июня 2011

Вы вызываете конструктор по умолчанию public Equipe(), который не инициализирует VJ.Просто удалите конструктор, если вы не собираетесь его использовать.

0 голосов
/ 15 июня 2011

Это исправит вашу проблему:

Match.java

private final Equipe eq1;
private final Equipe eq2;
public Match(final Equipe eq1, final Equipe eq2) 
{
   this.eq1 = eq1;
   this.eq2 = eq2;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...