2017-06-02 1 views
0

Also versuche ich sicherzustellen, dass, wenn ein bestimmtes Element aus einer statischen hashmap mehr als einmal verwendet wird, es nicht erlaubt, es erneut zu verwenden. Die Idee hinter dem Programm ist, dass ein Scout-Trupp nicht mehr als einen "schweren Bolter" und "Raketenwerfer" pro Truppe haben kann. Beachten Sie, dass "Heavy Bolter" und "Missle Launcher" zwei Hashmap-Schlüssel in einer Hashmapp-Sammlung sind.Java - Sicherstellen, dass ein Objekt aus einer Sammlung nur einmal verwendet werden kann

Also habe ich eine Klasse namens WeaponList, die eine statische hashmap von Fernwaffen hält. Und dann habe ich eine Scout-Klasse, die es einem Scout ermöglicht, seine Distanzwaffe von der im Konstruktor eingestellten Standardwaffe aufzurüsten. Einige Items in den WeaponList-Klassen hashmap sollten jedoch nur einmal erlaubt sein. Wenn ein Scout zu einem "Heavy Bolter" aufsteigt und es bereits ein Squad-Mitglied mit dieser Waffe gibt, sollte das Upgrade nicht stattfinden.

Gibt es eine Möglichkeit, dies zu tun? Ich habe diese Codezeile bereits in der Methode upgradeRanged der Scout-Klasse ausprobiert. if (WeaponList.getRanged("Heavy Bolter") > 1)) Aber das funktioniert nicht, weil ich denke, dass die Verwendung des '>' - Symbols nicht zwischen primtive und Reference-Typen funktioniert.

Ich sollte auch erwähnen, dass ich eine andere Klasse namens ScoutSquad habe, die eine Ansammlung von Scouts ist. Im Hauptprogramm erstellen Sie eine ScoutSquad Objektreferenz und fügen Scout-Objekte zum ScoutSquad hinzu. Jeder Scout kann seine Standardwaffen individuell verbessern. (Ich habe vielleicht darüber nachgedacht, die ScoutSquad-Klasse zu verwenden, um sicherzustellen, dass eine Fernkampfwaffe aus der HashMap nicht mehr als einmal verwendet werden kann).

Jede Hilfe mit diesem wäre appericated, und wenn es irgendwelche Verwirrung mit der Frage gibt, die ich kenne und ich werde die passenden Änderungen vornehmen.

Ich werde jetzt den Code für die relavant Klassen bieten:

WeaponList Klasse

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 Klasse (Fokus auf der upgradeRanged Methode)

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; 
    } 
} 

Hauptprogramm:

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(); 
    } 
} 
+0

Map.get() gibt das Objekt nicht die Anzahl zurück. Sie müssen möglicherweise explizit in das entsprechende Objekt konvertieren und die Attribute erhalten (in Ihrem Fall zählen). – Kajal

+0

@Kajal Okay, das klingt ein bisschen fortgeschritten für mich. Ich würde nicht wissen, wo ich anfangen soll. – GR412

+0

Sie sagten: "Ich habe vielleicht darüber nachgedacht, die ScoutSquad-Klasse zu verwenden, um sicherzustellen, dass eine Fernkampfwaffe aus der HashMap nicht mehr als einmal verwendet werden kann" - ich denke, das ist eine gute Idee und der bessere Ansatz. In einem bestimmten Squad zählen Sie die Anzahl der Scouts, die das N-fach verwenden, das Sie verwenden möchten. Das ist, wo diese Logik gehört, wenn ich richtig verstehe. Nicht in der globalen Karte. –

Antwort

0

HashMap.get() gibt null zurück, wenn der Artikel nicht in der Map vorhanden ist. Daher können Sie Folgendes tun:

if(WeaponList.getRanged("Heavy Bolter") != null) { 
    // Already has 
else { 
    // Doesn't have 
} 
+1

Das stellt nur sicher, dass der Artikel in der HashMap no ist? Ich will es, also kann nur einer von bestimmten Gegenständen aus dieser HashMap jedem Trupp zugewiesen werden, es sei denn, ich sehe es falsch an. – GR412

Verwandte Themen