Warum ist der If-Vergleich immer negativ?

Dieses Thema im Forum "Programmierung" wurde erstellt von ReefCityCraft, 1. Februar 2014.

  1. ReefCityCraft
    Offline

    ReefCityCraft

    Registriert seit:
    30. Januar 2012
    Beiträge:
    19
    Hallo,
    ich habe heute mein Plugin um eine Kit-Funktion erweitert. Diese Kits sollen allerdings nur 1x Täglich aufrufbar sein. Hierfür habe ich mir folgenden Code zusammengecodet:

    Code (Text):
    1.             // Zeit ermitteln, umbauen für config etc.
    2.             Object nowdate = new SimpleDateFormat("dd" + "MM" + "yyyy").format(new Timestamp(System.currentTimeMillis()));
    3.             Object cfgdate = cfg.get(p.getName());    
    4.            
    5.             // NUR EIN TEMPORÄRER TEST
    6.             p.sendMessage("Datum Heute: " + nowdate);
    7.             p.sendMessage("Datum Datei:  " + cfgdate);
    8.            
    9.             // Vergleiche ob cfgdate gleich nowdate. Falls gleich, kein Kit. Falls ungleich, Kit.
    10.             if(cfgdate == nowdate){    
    11.                 p.sendMessage(ChatColor.BLUE + "[" + ChatColor.GOLD + "ReefHelper" + ChatColor.BLUE + "] " + ChatColor.RED + "Du hast dir heute Bereits dein Kit abgeholt! Du kannst dir erst morgen ein neues holen!");
    12.  
    13.             } else {
    14.            
    15.                 // Speichern des neuen cfgdate-Wertes.
    16.                 cfg.set(p.getName(), (Object) nowdate);
    17.             try {
    18.                 this.cfg.save(file);
    19.             } catch (IOException e) {
    20.                 p.sendMessage(ChatColor.BLUE + "[" + ChatColor.GOLD + "ReefHelper" + ChatColor.BLUE + "] " + ChatColor.RED + "Es ist ein Fehler im KitCache aufgetreten, bitte kontaktiere dringend einen Admin!");
    21.                 System.out.println("[ReefHelper] Es ist ein Fehler bei der Speicherung des KitCaches aufgetreten!");
    22.                 e.printStackTrace();
    23.                 return true;
    24.             }    
    25.            
    26.             // Geben des Kits
    Hierfür lasse ich den Server erst die Entsprechende Datum ermitteln. Nun prüft er, ob ein Eintrag mit diesen Spieler bereits in der yml-Datei vorhandel ist. Falls dieser nicht Gleich mit des heutigem Datum ist, oder "null" ergibt, so bekommt man das Kit und das Datum derzeitige Datum wird neu eingetragen. Ist der Wert (also das Datum) in der yml-Datei allerdings gleich dem jetzigen Datum, so bekommt man dieses Kit nicht.

    Leider ist das Ergebnis des Vergleiches beiden Daten immer Negativ (also Ungleich), obwohl sie eigentlich gleich sind.
    [​IMG]

    Wäre nett, wenn da jmd eine Lösung findet und sie mal postet.

    Danke!
     
    #1
  2. c-eAgle
    Offline

    c-eAgle

    Registriert seit:
    14. Juli 2011
    Beiträge:
    38
    Minecraft:
    ceagle2
    Vorab: ich bin kein Java-Experte und bitte um Verzeihung für etwaige, semantische Fehler. Aber mir machts den Anschein, als ob der Datentyp sich unterscheiden könnte. Evtl. mal folgende If-Abfrage stattdessen probieren:

    if (cfgdate == nowdate.toString()) { ... }

    Oder muss cfgdate da ebenso noch umgewandelt werden? In dem Fall tue genau das. Und wenn du die Ausgaben im Spiel zu Debugging-Zwecken vergleichen willst, probiere folgende Ausgaben:

    p.sendMessage("Datum Heute: " + nowdate.getClass());
    p.sendMessage("Datum Datei: " + cfgdate.getClass());

    Viele Grüße,
    cea
     
    #2
  3. Paulomart
    Offline

    Paulomart

    Registriert seit:
    3. November 2013
    Beiträge:
    148
    Ort:
    C:/Eclipse/Workspace/
    Minecraft:
    Paulomart
    #3