数据在类之间传输不正确;导致NullPointerException

问题描述:

我最近发布了一个关于在我调用一个对象数组时得到一个NullPointerException的问题。我已将问题追溯到提供数据的主要方法和接收数据的问题方法(Team.sortPlayers())之间的一些断开。数据在类之间传输不正确;导致NullPointerException

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: [email protected], 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; 
     } 
    } 
} 
} 

如果有人能帮助我判断这里发生了什么,我会非常感激!我已加评论这两个问题的声明,以及它的全部引擎收录可以发现如下: http://pastebin.com/QGALKbP6

+0

请发布stacktrace。 – Mohayemin 2012-03-29 03:26:45

“TEMP”不应该是一个成员变量,它应该是本地的,如果块的排序方法。而且,因为如果它扩大了范围,由于你的“if”块缺少一些大括号,你无意中清除了你的球员阵列的一些成员。

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

一般,即使括号是在某些情况下可选的,你应该使用他们所有的时间,以避免微妙的错误是这样的。

+1

此外,您有一个名为“temp”的'String'字段和一个名为“temp”的'Player'字段。尽管技术上可以接受,但这是糟糕的形式。 – gobernador 2012-03-29 03:40:06

+0

我感到很蠢,因为没有注意到...谢谢你,亲切的先生! – 2012-03-29 21:12:23