Java - 确保集合中的项目只能使用一次

标签 java if-statement hashmap conditional-statements aggregation

因此,我试图确保如果静态 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/

相关文章:

java - 安卓快速连接/协议(protocol)

java - 如何从枚举中获取字段

php - SELECT 1 FROM 和 if 语句

java - If/Else 语句 - 子句不执行 Java

android - 在 AsyncTask 的 onPostExecute 方法中获取的返回值

即使存在键,Java HashMap 也返回空值

java - 将 Java 对象列表从 Spring 4 Controller 返回到 AJAX

java - 下降阶乘JAVA

Excel 白类和夜类时间表

java - 类 Entry<K,V> 实现 Map.Entry<K,V>