因此,我试图确保如果从静态哈希映射中的某个项被多次使用,那么它不允许您再次使用它。该计划背后的想法是,一个侦察兵小队每个小队不能有一个以上的“沉重的弹头”和“导弹发射器”。请注意,“heavy bolter”和“missle launcher”是hashmap集合中的两个hashmap键。Java - 确保集合中的项只能使用一次
所以我有一个名为WeaponList的类,它包含一个远程武器的静态散列表。然后我有一个Scout类,它允许侦察兵从构造函数中的默认集合中升级它的远程武器。但是,WeaponList类hashmap中的某些项只能被允许升级到一次。所以如果一个侦察兵升级到一个“Heavy Bolter”并且已经有一个使用该武器的小队成员,升级不应该发生。
有没有办法做到这一点?我已经在Scout类的upgradeRanged方法中尝试了这一行代码。 if (WeaponList.getRanged("Heavy Bolter") > 1))
但那不工作,因为我认为使用'>'符号不适用于原始类型和引用类型之间。
我还应该提到,我有另一个名为ScoutSquad的类,它是童子军的聚集。在主程序中创建一个ScoutSquad对象引用,然后将Scout对象添加到ScoutSquad。每个侦察兵都可以单独升级他们的默认武器。 (我也许想过使用ScoutSquad类来确保HashMap中的远程武器不能被使用多次)。
任何与此有关的帮助都会变得更加严谨,如果对问题的解读有困难,我会进行适当的修改。
现在我将提供用于初步认识类的代码:
WeaponList类
public class WeaponList
{
static Map<String, Ranged> rangedlist = new HashMap<String, Ranged>()
{{
put("Bolter", new Ranged2H("Bolter", 1));
put("Bolt Pistol", new Ranged("Bolt Pistol", 1));
put("Flamer", new Ranged2H("Flamer", 1));
put("Meltagun", new Ranged2H("Meltagun", 1));
put("Plasma Gun", new Ranged2H("Plasma Gun", 1));
put("Plasma Pistol", new Ranged("Plasma Pistol", 10));
put("Shotgun", new Ranged2H("Shotgun", 10));
put("Sniper Rifle", new Ranged2H("Sniper Rifle", 5));
put("Assault Cannon", new Ranged2H("Assault Cannon", 10));
put("Cyclone Missle Launcher", new Ranged2H("Cyclone Missle Launcher", 10));
put("Heavy Bolter", new Ranged2H("Heavy Bolter", 10));
put("Heavy Flamer", new Ranged2H("Heavy Flamer", 10));
put("Assault Cannon", new Ranged2H("Lascannon", 10));
put("Missle Launcher", new Ranged2H("Missle Launcher", 10));
put("Multi Melta", new Ranged2H("Multi Melta", 10));
put("Plasma Cannon", new Ranged2H("Plasma Cannon", 10));
}};
public static Ranged getRanged(String index)
{
return rangedlist.get(index);
}
public static Map<String, Ranged> getRangedList()
{
return rangedlist;
}
}
侦察类(重点upgradeRanged方法)
public class Scout
{
private Weapon ranged;
private int points;
//DEFAULT SCOUT
public Scout()
{
ranged = new Ranged("Bolt Pistol", 0);
points = 13;
points = points + ranged.getWeaponPoints();
}
public void rangedUpgrade(Ranged ranged)
{
switch(ranged.toString())
{
case "Bolter" :
case "Shotgun" :
case "Sniper Rifle" :
case "Heavy Bolter" :
case "Missle Launcher" :
this.ranged = ranged;
points = points + ranged.getWeaponPoints();
break;
default :
System.out.println("A Scout can't have a " + ranged);
}
if (WeaponList.getRanged("Heavy Bolter") > 1))
{
}
}
public Weapon getRangedUpgrade()
{
return ranged;
}
@Override
public String toString()
{
return "|| " + "Ranged Weapon: " + ranged + " || " + "Melee Weapon: " + melee + " || " + "Points: " + points;
}
}
主程序:
public class ArmyBuilderDemo
{
public static void main(String[] args) throws Exception
{
ScoutSquad scouts = new ScoutSquad("Squad 1");
Scanner input = new Scanner(System.in);
System.out.println("Enter the squad size: ");
int size = input.nextInt();
for (int i = 0; i < size; i++)
scouts.addScout(new Scout());
System.out.println(scouts.getScoutSquad());
scouts.getScout(5).rangedUpgrade(WeaponList.getRanged("Heavy Bolter"));
System.out.println(scouts.getScoutSquad());
input.close();
}
}
Map.get()返回的对象不是count。您可能需要显式转换为相应的对象并获取属性(在您的案例中计数)。 – Kajal
@Kajal好的,这听起来有点高级给我。我不知道从哪里开始。 – GR412
你说过“我可能想过使用ScoutSquad类来确保HashMap中的远程武器不能被使用多次” - 我认为这是一个好主意,也是更好的方法。在一个特定的阵容中,你可以计算出使用最多N次使用的侦察兵的数量。如果我理解正确,那就是这个逻辑所属的地方。不在全球地图中。 –