Fehler bei HashMaps

Dieses Thema im Forum "Programmierung" wurde erstellt von Kronos197, 17. Mai 2015.

  1. Kronos197
    Offline

    Kronos197

    Registriert seit:
    20. Dezember 2013
    Beiträge:
    153
    Ort:
    Frankfurt
    Minecraft:
    Kronos197
    Hallo Leute,

    Ich habe gerade ein unerwartetes Problem. Wenn ich etwas in einer HashMap abspeichern will wird es von der HashMap nicht angenommen, blaib also leer.
    Hier ist mein Code. In einem MoveEvent rufe ich alle sachen ab und lasse mir nachichten schiken und entitys spawn. Es wird aber nichts in der HashMap gespeichter und es kommt auch keine Fehlermeldung.
    Könnt ihr mir vileicht helfen??


    PHP:
    1.     private HashMap<Player, Entity> entitys = new HashMap<>();
    2.     private Message msg = new Message();
    3.  
    4.     public void spawnEntity(Player p, EntityType type)
    5.     {
    6.         if (entitys.containsKey(p) == true)
    7.         {
    8.             removeEntity(p);
    9.         }
    10.  
    11.         Entity entity = p.getWorld().spawnEntity(p.getLocation(), type);
    12.  
    13.         entity.setCustomName(p.getName() + "'s Pet");
    14.         entity.setCustomNameVisible(true);
    15.  
    16.         this.entitys.put(p, entity);
    17.  
    18.         p.sendMessage(msg.pets_create);
    19.     }
    20.  
    21.     public void removeEntity(Player p)
    22.     {
    23.         if (!this.entitys.containsKey(p))
    24.         {
    25.             p.sendMessage(msg.pets_not_exist);
    26.             return;
    27.         }
    28.         Entity entity = this.entitys.get(p);
    29.         entity.remove();
    30.         this.entitys.remove(p);
    31.         p.sendMessage(msg.pets_remove);
    32.     }
    33.  
    34.     public boolean hasEntity(Player p)
    35.     {
    36.         p.sendMessage("frage");
    37.         if (this.entitys.get(p) != null)
    38.         {
    39.             p.sendMessage("frage ja");
    40.             return true;
    41.         }
    42.         else
    43.         {
    44.             p.sendMessage("frage nein");
    45.             p.sendMessage("" + entitys);
    46.             return false;
    47.         }
    48.     }
    49. }
    50.  
     
    #1
  2. MaxCode
    Offline

    MaxCode

    Registriert seit:
    29. Januar 2012
    Beiträge:
    111
    Ort:
    Zu Hause =)
    Minecraft:
    proskatermax
    privateHashMap<Player, Entity> entitys = new HashMap<>();
    Hier fehl eine Leertaste zwischen private und der HashMap. Kann sein das es daran liegt, aber ich denke das du dann ne Fehlermeldung bekommen würdest.

    Könntest ja mal versuchen alle Methoden mit einem Befehl einzeln aufzurufen und dann schauen obs geht.

    MFG
    Max
     
    #2
  3. Kronos197
    Offline

    Kronos197

    Registriert seit:
    20. Dezember 2013
    Beiträge:
    153
    Ort:
    Frankfurt
    Minecraft:
    Kronos197
    Jep da ist keine fehlermeldung war nur ein problem beim kopieren.
    Die einzelenen methoden funktionieren auch alle fehlerfrei. Einzig und allei ist das problem, dass nichts in die HashMap gespeichert wird.
     
    #3
  4. [Dev] iTzSasukeHDxLP
    Offline

    [Dev] iTzSasukeHDxLP Ehem. Teammitglied

    Registriert seit:
    5. Januar 2014
    Beiträge:
    938
    *hust* Keine Player in Collections/Maps *hust*

    Bei hasEntity kannst du auch einfach prüfen ob der Key für den Spieler vorhanden ist (Map#contains()), da der Spieler (Sünde) ja sowieso nur drinsteht, wenn er ein Entity hat.

    Die Mehrzahl von entity ist übrigens entities ;)

    Bei 'p.sendMessage(msg.pets_create);' Würde ich mir übrigens wenn überhaupt einmal das Prinzip von Settern und Gettern ansehen.

    Außerdem wäre der restlcieh Code toll, um dein Problem nachzuvollziehen.
     
    #4
  5. MiCrJonas
    Offline

    MiCrJonas

    Registriert seit:
    29. Oktober 2012
    Beiträge:
    1.069
    Eine Map ist keine Collection. Von daher muss die Methode Map#contains(K) benutzt werden, wobei in dem Beispiel K der Spieler ist.

    @Kronos197 Woran erkennst du, dass die Map leer ist?
     
    #5
  6. Kronos197
    Offline

    Kronos197

    Registriert seit:
    20. Dezember 2013
    Beiträge:
    153
    Ort:
    Frankfurt
    Minecraft:
    Kronos197
    Ich lass sie mir in der hasEntity methode per message senden.
    und diese ruf ich ab nachdem ich die createEntity methode aktiviert habe mit einem InteraktEvent aktiviere.

    p.sendMessage("" + entitys);

    so sied es ungefähr aus.

    Ja Ich weiß doch ich finde das Prinzip mit Settern und Gettern für mein Vorhaben unsinnig.
    Auch wenn es vorteile hat.

    Mein Programm ist zu klein um dafür extra setter und getter zu benutzen. Wenn ich große Programme/Plugins schreibe benutze ich auch setter und getter.

    LG
    Kronos197
     
    #6
  7. MiCrJonas
    Offline

    MiCrJonas

    Registriert seit:
    29. Oktober 2012
    Beiträge:
    1.069
    Dann poste doch bitte den kompletten Code, der benutzt wird.
     
    #7