Данные не передаются должным образом между классами;результаты в NullPointerException - PullRequest
0 голосов
/ 29 марта 2012

Недавно я опубликовал вопрос о получении NullPointerException всякий раз, когда я вызывал массив объектов. Я проследил проблему до некоторого разъединения между основным методом, предоставляющим данные, и соответствующим методом (Team.sortPlayers()), получающим данные.

public class Project3 {


public static void main(String[] args) {
Input3 input = new Input3();
Team teams[] = new Team[input.NUMBER_OF_TEAMS];
Player players[] = new Player[input.NUMBER_OF_PLAYERS];
String playas[] = new String[input.NUMBER_OF_PLAYERS];
String temp;
String name;

for ( int i=0 ; i<input.NUMBER_OF_TEAMS ; i++ ) {
    name = input.getNextString();
    System.out.println(name);
    for ( int j=0 ; j<input.NUMBER_OF_PLAYERS ; j++ )
    {playas[j] = input.getNextString();
        System.out.println(playas[j]);}
    teams[i] = new Team(name, playas); //THIS LINE SENDS OVER THE DATA TO THE QUESTIONABLE METHOD
    teams[i].sortPlayers();
    System.out.println(teams[i]);
    }
}
}

//------------------------------
//
//------------------------------

class Player {

public String[] name;

public Player(String inputname) {

    name = inputname.split(" ");

}
public String[] getName() {
    return name;
}

public String getFirstName() {
    return name[0];
}

public String getLastName() {
    String last = name[1];
    return last;
}
}

//-----------------------
//
//-----------------------

class Team {
private String teamname;
public Player players[];
public Player temp;

public Team(String inputname, String plays[]) { //THIS METHOD RECEIVES A NULL FOR 'INPUTNAME' AND WHAT APPEARS TO BE A JIBBERISH (ex: Player@5bdf59bd, maybe a memory address?) FOR 'PLAYS[]'

    inputname = teamname;
    System.out.println(teamname);    
    players = new Player [plays.length];
    for( int k=0 ; k<plays.length ; k++ )
    {   System.out.println(inputname);
        this.players[k] = new Player(plays[k]);
    System.out.println(players[k]);
    }

}

public void sortPlayers() {
    int n = players.length;

    for (int pass=1; pass < n; pass++){
        for (int i=0; i < n-pass; i++) {
            String playerName = players[i].getLastName();
            String nextPlayerName = players[i+1].getLastName();
            if(playerName.compareTo(nextPlayerName) > 0)
            temp = players[i];
        players[i] = players[i+1];
        players[i+1] =  temp;
        }
    }
}
}

Если бы кто-нибудь мог помочь мне понять, что здесь происходит, я был бы очень благодарен! Я отметил два проблемных утверждения с комментариями, и PasteBin всего этого можно найти ниже: http://pastebin.com/QGALKbP6

1 Ответ

2 голосов
/ 29 марта 2012

«temp» не должен быть переменной-членом, он должен быть локальным по отношению к блоку if в методе sort.и потому, что если его расширенная область, вы непреднамеренно очищаете некоторые элементы массива игроков из-за того, что в вашем блоке «if» отсутствуют некоторые фигурные скобки.

        if(playerName.compareTo(nextPlayerName) > 0) {
          Player temp = players[i];
          players[i] = players[i+1];
          players[i+1] =  temp;
        }

обычно, даже если фигурные скобки являются необязательными вв некоторых случаях вы должны использовать их все время, чтобы избежать таких тонких ошибок, как этот.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...