因此,我试图确保如果静态 HashMap 中的某个项目被多次使用,则它不允许您再次使用它。该计划背后的想法是,侦察小队每个小队不能拥有超过一个“重型爆弹枪”和“导弹发射器”。请注意,“重型爆弹枪”和“导弹发射器”是 HashMap 集合中的两个 HashMap 键。
所以我有一个名为 WeaponList 的类,它包含远程武器的静态 HashMap 。然后我有一个侦察兵类,它允许侦察兵从构造函数中设置的默认武器升级其远程武器。然而,WeaponList 类 HashMap 中的某些项目只应允许升级一次。因此,如果侦察兵升级到“重型爆弹枪”,并且已经有一名小队成员拥有该武器,则不应进行升级。
有办法做到这一点吗?我已经在 Scout 类的 updateRanged 方法中尝试过这行代码。 if (WeaponList.getRanged("Heavy Bolter") > 1))
但这不起作用,因为我认为使用“>”符号在原始类型和引用类型之间不起作用。
我还应该提到,我有另一个名为 ScoutSquad 的类,它是童子军的聚合。在主程序中,您创建 ScoutSquad 对象引用,然后将 Scout 对象添加到 ScoutSquad。每个侦察兵都可以单独升级他们的默认武器。 (我可能正在考虑使用 ScoutSquad 类来确保 HashMap 中的远程武器不能多次使用)。
任何与此有关的帮助都会被应用,如果问题有任何困惑,请告诉我,我将做出适当的更改。
我现在将提供相关类的代码:
武器列表类
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;
}
}
Scout类(重点关注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();
}
}
最佳答案
将其添加到ScoutSquad类(class)中:
public boolean checkUses(String weapon) {
for (Scout scout : scouts)
if (scout.getRangedUpgrade() == WeaponList.getRanged(weapon)
return true;
return false;
}
更改Scout类的rangedUpgrade方法:
public void rangedUpgrade(Ranged ranged)
{
switch(ranged.toString())
{
case "Heavy Bolter" :
case "Missle Launcher" :
if (getSquad().checkUses(ranged.toString())) {
System.out.println(
"This scout's squad is already using a " + ranged);
break;
}
case "Bolter" :
case "Shotgun" :
case "Sniper Rifle" :
this.ranged = ranged;
points = points + ranged.getWeaponPoints();
break;
default :
System.out.println("A Scout can't have a " + ranged);
break;
}
}
关于Java - 确保集合中的项目只能使用一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44329626/