如何在循环中为每个创建的Player对象设置不同命名(如player1、player2)
问题解答
首先明确:Java里没办法在运行时动态生成像player1、player2这种自定义名称的变量,因为变量名是编译阶段就确定好的,不能在循环里动态创建。
但你可以用集合来存储这些Player对象,实现类似“按序号访问”的需求,常用的有两种方式:
方式一:用ArrayList存储(推荐)
用List来保存所有Player对象,之后可以通过索引(从0开始)访问对应玩家,索引+1就是你想要的player编号。修改你的代码如下:
// 先声明一个List来存放所有玩家对象 List<Player> players = new ArrayList<>(); Scanner scan = new Scanner(System.in); for (int i = 0; i < playerNumber; i++) { System.out.println("PLAYER " + (i+1) + "'S NAME IS:"); String playerName = scan.nextLine(); // 创建Player对象并加入List Player player = new Player(playerName); players.add(player); } // 之后访问玩家的示例:比如获取第1个玩家(索引0) Player player1 = players.get(0); // 获取第2个玩家(索引1) Player player2 = players.get(1);
方式二:用HashMap存储(按自定义key访问)
如果你非要用类似"player1"这样的字符串来关联对象,可以用Map,把字符串作为key,Player对象作为value:
Map<String, Player> playerMap = new HashMap<>(); Scanner scan = new Scanner(System.in); for (int i = 0; i < playerNumber; i++) { System.out.println("PLAYER " + (i+1) + "'S NAME IS:"); String playerName = scan.nextLine(); String key = "player" + (i+1); Player player = new Player(playerName); playerMap.put(key, player); } // 之后访问玩家的示例:通过key获取 Player player1 = playerMap.get("player1"); Player player2 = playerMap.get("player2");
总结:动态变量名在Java里行不通,用集合存储是最合理的解决方案,ArrayList更适合按顺序访问的场景,HashMap适合按自定义标识访问的场景。
内容的提问来源于stack exchange,提问作者Gabs
相关产品推荐
相关产品推荐

