【发布时间】:2016-05-29 00:18:08
【问题描述】:
我希望获得与执行以下操作相同的结果:
我有一个名为Territory 的类,其中每个实例的值都将被命名为String[] countryNames。 Territory 有两个内部变量,player 和 numberOfArmies。
要创建每个 Territory 实例 (public Territory(String player, int numberOfArmies)),我将创建一个循环遍历每个 countryNames,创建一个具有此名称的新 Territory,并将 player 和 numberOfArmies 分配给这个Territory。大致如下:
countryNumber = 0;
for (int i = 0; i < playerNames.length(); i++) {
Territory countryNames[countryNumber] = new Territory(playerNames[j], 0);
countryNumber++;
}
这是一个假设玩家和国家数量相同的简单示例。在我的计划中不会出现这种情况 - 玩家可以被分配到多个地区。
我知道 Java 不支持获取 String 的值并将其分配给变量的名称 - 那么我还有什么其他方法可以创建某种数据结构,其中每个元素都有一个名称和两个变量?我还没有真正研究过 Java 中的地图,但我认为某种地图可能是解决方案。
【问题讨论】:
-
如果一个Territory应该有一个名字,为什么Territory类里面没有一个name属性?
-
因为唯一需要使用名称的时候是访问类并获取
player和numberOfArmies。通过给它一个内部name变量,我将在类中获得国家/地区的名称,但仍需要将这个类实例的实际名称与国家/地区相关联。 -
将玩家姓名关联到地区和将国家/地区名称关联到地区有什么区别?我认为这基本上是同一件事:领土是给定的国家和给定的玩家。那么,为什么在 Territory 中可以有 playerName 属性,而没有 countryName 呢?
-
这并没有什么问题——只是我仍然需要在外部将每个
Territory与每个国家/地区关联起来。如果我有 50 个国家,想知道哪个玩家占领了澳大利亚,我必须找到与澳大利亚相关的Territory。我认为最好的方法是调用Australia.getPlayer()。 -
没有。那是不可能的。您不能动态创建变量。但是您可以遍历所有地区(将存储在数组或列表中),找到国家为“澳大利亚”的地区,然后从中获取玩家姓名。当然,使用 Map
也很好,但这些并不是相互矛盾的技术。如果一个地区与一个国家/地区相关联,您可能需要执行 someTerritory.getCountry() 来了解它,而不必去地图。
标签: java string class dictionary hashmap