更改对象数组中的数据

问题描述:

我一直在尝试为朋友制作游戏,但我在使类在课程Players中工作时遇到问题。我希望能够在列表中设置玩家的名字,或者更改他们的名字。但我一直在这条线上发生错误。这发生在我将变量Playerstatic中更改为public后。在worldhomicide.drinkinggame.PlayerInfo.Players.setPlayers(Players.java:16) 在worldhomicide.drinkinggame.main.Game.main(游戏更改对象数组中的数据

“异常在线程 “主” 显示java.lang.NullPointerException 。 java:25)“

任何帮助将不胜感激!我发布了下面所有需要的代码。

游戏类

public class Game{ 

    public static void main(String[] args) { 

     MessageHandler.gameRules(); // Display Game Information 
     Players.getAmount();Players.setPlayers(); // Get player data 

     System.out.println("What player would you like to look up?"); 
     int choice = Integer.parseInt(EventHandler.keyboard.next()); choice -= 1; 
     System.out.println(Players.player[choice].name); 


    } 

} 

玩家等级

public class Players extends EventHandler { 

    public static int playerAmount; 
    public static Player[] player; 

    public static void setPlayers(){  
     player = new Player[playerAmount]; 

     for(int i = 0; i < player.length; i++){ 
      int pn = i+1; 
      player[i].setName(getName(pn)); 
     } 
    } 

    public static void getAmount(){ 
     MessageHandler.playerAmount(); 
     playerAmount = Integer.parseInt(keyboard.next()); 
    } 


} 

类事件处理

public class EventHandler { 

    public static Scanner keyboard = new Scanner(System.in); 

    public static String getName(int playerNumber){ 
     System.out.println("What is player " + playerNumber + "'s name?"); 
     String name = keyboard.next();  
     return name; 

    } 

} 

Player类

public class Player { 

    public String name; 
    public int score; 

    public void setName(String name){ 
     this.name = name; 
    } 

} 
+1

_“...我不断收到错误......”_ - 如果您不与我们分享错误,您希望得到什么帮助?您的帖子并包含完整的错误消息和堆栈跟踪(如果适用)。请访问[帮助]并阅读[问]以获取更多信息。 –

+0

异常在线程 “主” 显示java.lang.NullPointerException \t在worldhomicide.drinkinggame.PlayerInfo.Players.setPlayers(Players.java:16) \t在worldhomicide.drinkinggame.main.Game.main(Game.java:25) –

+0

请勿在评论中张贴关键信息。 [编辑]它到你原来的问题。 –

注意,在你的setPlayers()法,循环内部,你没有访问player[i].setName()方法之前创建Player对象。

for(int i = 0; i < player.length; i++){ 
    int pn = i+1; 
    player[i] = new Player(); //you need to create Player object 
    player[i].setName(getName(pn)); 
} 
+1

非常感谢!这给了我最大的头痛。按照现在的方式工作! –

+0

此外,在您的游戏类主要方法中,您不会为玩家创建任何对象。 –

+0

他正在使用Player类的静态方法。所以在这种情况下不需要创建Players对象。纠正我,如果我错了。 @Abhishekkumar –