Java 类间数据传输不正确;导致NullPointerException
我最近发布了一个问题,关于在调用对象数组时获取Java 类间数据传输不正确;导致NullPointerException,java,class,nullpointerexception,transfer,Java,Class,Nullpointerexception,Transfer,我最近发布了一个问题,关于在调用对象数组时获取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 play
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;
}
}
}
}
公共类项目3{
公共静态void main(字符串[]args){
Input3输入=新的Input3();
团队[]=新团队[输入。团队数量];
玩家[]=新玩家[输入。玩家数量];
字符串playas[]=新字符串[input.NUMBER_OF_PLAYERS];
字符串温度;
字符串名;
对于(int i=0;i“temp”不应该是成员变量,它应该是sort方法中if块的本地变量。而且,由于if的扩展范围,由于“if”块缺少一些大括号,您无意中清除了players数组的一些成员
if(playerName.compareTo(nextPlayerName) > 0) {
Player temp = players[i];
players[i] = players[i+1];
players[i+1] = temp;
}
一般来说,即使大括号在某些情况下是可选的,您也应该一直使用大括号来避免类似这样的细微错误。此外,您还有一个名为“temp”的String
字段和一个名为“temp”的Player
字段.虽然这在技术上是可以接受的,但它的形式很糟糕。我觉得很愚蠢,因为我没有注意到……谢谢你,善良的先生!