CodeGym
Aktion
CodeGym University
Lernen
Kurs
Aufgaben
Umfragen & Quizze
Spiele
Hilfe
Zeitplan für einen Tritt in den Hintern
Community
Benutzer
Forum
Chat
Artikel
Erfolgsstorys
Aktivität
Rezensionen
Abonnements
Helles Design
Frage
  • Rezensionen
  • Über uns
Start
Jetzt lernen
Jetzt lernen
  • Alle Fragen
Sakka Mouid
Level 19
Hannover
  • 20.03.2022
  • 196Aufrufe
  • 7Kommentare

Was habe ich falsch gemacht ?

Frage zur Aufgabe Die liebe Emma und die Sommerferien
Java Syntax,  Level 8,  Lektion 8
Gelöst


Erstelle eine Map<String, Date> und füge zehn Einträge hinzu, die (Nachname, Geburtsdatum)-Paaren entsprechen.
Entferne alle im Sommer geborenen Personen aus der Map.
Hinweis: Bei CodeGym dauert der Sommer vom 1. Juni bis 31. August.

Anforderungen:
  • Das Programm darf keinen Text auf dem Bildschirm anzeigen.
  • Das Programm darf keine Werte von der Tastatur lesen.
  • Die Methode mapErstellen() muss eine HashMap erstellen und zurückgeben, diee (String, Date)-Element besitzt und 10 Einträge enthält.
  • Die alleSommergeburtstagskinderEntfernen()-Methode muss alle im Sommer geborenen Personen aus der Map entfernen.
package de.codegym.task.task08.task0816; import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.Locale; /* Die liebe Emma und die Sommerferien */ public class Solution { public static HashMap<String, Date> mapErstellen() throws ParseException { DateFormat df = new SimpleDateFormat("MMMMM d yyyy", Locale.ENGLISH); HashMap<String, Date> map = new HashMap<String, Date>(); map.put("Stallone", df.parse("JUNE 1 1980")); //schreib hier deinen Code map.put("Mein Geburtstag", df.parse("MARCH 4 2001")); map.put("rtergerg", df.parse("JYLY 1 1999")); map.put("Atallone", df.parse("JUNE 5 2004")); map.put("rtallone", df.parse("JUNE 4 2007")); map.put("gtallone", df.parse("JUNE 26 2016")); map.put("ttallone", df.parse("JUNE 5 1950")); map.put("btallone", df.parse("JUNE 16 1990")); map.put("mtallone", df.parse("JUNE 12 1980")); map.put("dtallone", df.parse("JUNE 11 1990")); return map; } public static void alleSommergeburtstagskinderEntfernen(HashMap<String, Date> map) { //schreib hier deinen Code HashMap<String, Date> copy = new HashMap<String, Date>(map); int month; for (Date date : copy.values()) { month = date.getMonth() + 1; if ( month == 6 || month ==7 || month ==8){ map.remove(date); } } } public static void main(String[] args) { } }
0
Kommentare (7)
  • Beliebt
  • Neu
  • Alt
Du musst angemeldet sein, um einen Kommentar schreiben zu können
Lisa L
Level 47 , Nuremberg, Germany
20 März 2022, 21:16
Drei Dinge fallen mir auf... 1. Du testest deinen Code nicht. Mach es doch, wie ich es dir in deiner letzten Frage gezeigt habe... schreibe dir eine main Methode wie...
public static void main(String[] args) throws ParseException {
    HashMap<String, Date> gebMap = mapErstellen();
    alleSommergeburtstagskinderEntfernen(gebMap);

    for(Map.Entry<String, Date> element : gebMap.entrySet())
        System.out.format("Name: %s, month of birth: %s%n"
                , element.getKey()
                , new SimpleDateFormat("MMMM", Locale.ENGLISH).format(element.getValue()));
}
Dann fällt dir 2. auf: Zeile 22 und dann evtl. auch 3: du brauchst beides aus der Map, key und value. Also machst du es so wie ich in der main und benutzt ein Map.Entry oder du iterierst über ein keyset und holst dir den value
for (String key : copy.keySet())
{
    month = copy.get(key).getMonth() + 1;
    if (month >= 6 && month <= 8) {
        map.remove(key);
    }
}
+1
Lisa L
Level 47 , Nuremberg, Germany
20 März 2022, 21:24
Und falls es dich interessiert, hier ein Vorschlag, der nicht die deprecated getMonth Methode benutzt... die JavaDocs sagen, man möge nun bitte Calendar verwenden. So sie es und gleichzeitig hab ich auch noch mal einen Iterator verwendet... bietet sich hier ja an (wg. dem Löschen).
Calendar cal = GregorianCalendar.getInstance();
Iterator<String> it = map.keySet().iterator();
while (it.hasNext()) {
    cal.setTime(map.get(it.next())); // it.next() brings up the Date object and with that we set the calendar
    int month = cal.get(Calendar.MONTH); // now initialize a temp variable that holds the month number of the current object
    if (month >= Calendar.JUNE && month <= Calendar.AUGUST) // compare it to the summer month, no messing around with +1 necessary anymore
        it.remove(); // and delete in case it is a summer month
}
+2
Sakka Mouid
Level 19 , Hannover, Deutschland
21 März 2022, 15:15
Ach so , ich dachte ich kann einfach mir die Values holen , ohne über die Schluessel zu itierieren . Vielen Dank!!
0
Lisa L
Level 47 , Nuremberg, Germany
21 März 2022, 15:42
remove() löscht den übergebenen key. Wenn du ein Date übergibst, wird es automatisch in einen String gewandelt (keys sind hier ja Strings). Dann wird gesucht, ob es diesen key gibt -> nein, ist ja auch ein Wert. Das war's schon. Edit: es gäbe schon noch eine Möglichkeit... ändere Zeile 41 zu
map.values().remove(date);
das macht aber viel overhead und ist nicht wirklich leicht zu verstehen. Sollte deswegen imho nicht in dem Kontext verwendet werden.
0
Sakka Mouid
Level 19 , Hannover, Deutschland
21 März 2022, 19:10
Hallo Lisa . Sorry für die Störung , aber ich alles korrigiert wie du mir gesagt hast .ich glaube diesemal , das Problem liegt bei die dritte Anforderung , sie ist immer nicht erfüllt.
0
Lisa L
Level 47 , Nuremberg, Germany
21 März 2022, 19:34Lösung
siehe oben 1. Du testest deinen Code nicht. Dann fällt dir 2. auf: Zeile 22 - > JYLY ist kein Monat der geparst werden könnte
+2
Sakka Mouid
Level 19 , Hannover, Deutschland
21 März 2022, 19:48
Ach so . Das war diese JYLY . jetzt läuft es . Vielen Dank noch!!
+1
Lernen
  • Registrierung
  • Java-Kurs
  • Hilfe zu Aufgaben
  • Preise
  • Spieleprojekte
  • Java Syntax
Community
  • Benutzer
  • Artikel
  • Forum
  • Chat
  • Erfolgsstorys
  • Aktivität
  • Affiliate Program
Unternehmen
  • Über uns
  • Kontakt
  • Rezensionen
  • Medien
  • CodeGym im Bildungsbereich
  • FAQ
  • Support
CodeGym CodeGym ist ein Java-Tutorial zum Lernen von Java von Grund auf. Dieser Kurs ist perfekt dafür geeignet, Java von Beginn an zu meistern. Er enthält über 1200 Aufgaben mit Sofortüberprüfung und grundlegende Theorie zu den Java-Grundlagen. Damit auch du bei deinem Kurs erfolgreich bist, haben wir eine ganze Reihe motivierender Inhalte: Quizfragen, Programmierprojekte, Inhalte zu effizientem Lernen und zum Berufseinstieg als Java-Entwickler.
Folgen
Sprache der Oberfläche
Programmierer werden gemacht, nicht geboren © 2023 CodeGym
MastercardVisa
Programmierer werden gemacht, nicht geboren © 2023 CodeGym
This website uses cookies to provide you with personalized service. By using this website, you agree to our use of cookies. If you require more details, please read our Terms and Policy.