2012-03-29 3 views
0

최근 객체 배열을 호출 할 때마다 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

스택 추적을 게시하십시오. – Mohayemin

답변

2

"온도"는 멤버 변수 안된다, 그것은 로컬되어야하는 경우, 정렬 방법 블록 . 확장 된 스코프라면 "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

+0

나는 그것을 알아 채지 못해서 너무 바보 같아서 ... 고마워요, 선생님! –

관련 문제