Array, Geburtsdatum, Vergleichen

SnowDay

Mitglied
Hallo an alle Liebe Leser,

ich habe ein folgendes Problem:

Ich möchte ein 2. Dimensionales Array Erzeugen mit Namen und ihr dazugehörigen Geburtstag
z.B. Dennis 24.04
Laura 31.01
Nico 18.05
usw.
und dann soll geschaut werden, ob von denen heute einer Geburtstag hat und wenn ja, soll der Name ausgeben werden.

Hätte da jemand eine Idee wie man das machen könnte?
Wäre sehr Lieb, komme nicht mehr Weiter.
 
Ein zwei-dimensionales Array ist gänzlich unpassend. Du willst ja nicht jeder Person potenziell jeden Tag zuordnen können. Bei dir gibt es nur eine Dimension, nämlich die Person mit ihrem jeweiligen Geburtstag als Tupel.
Um noch effizient über den aktuellen Tag auf die Liste der Personen, die an diesem Tag Geburtstag haben, indexieren zu können, eignet sich z.B. eine Map mit java.time.MonthDay als Schlüssel:
Java:
import java.util.Map;
import java.util.List;
import java.time.MonthDay;
...
Map<MonthDay, List<Person>> geburtstage;
 
Wenn du es unbedingt mit einem Array machen möchtest, dann ist dein Tupel einfach eine Klasse mit den zwei Eigenschaften Geburtstag und Name der Person:
Java:
class Person {
  MonthDay geburtstag;
  String name;
}
Person[] personenMitIhrenGeburtstagen;
 
Okay, soweit habe ich das Verstanden, danke bisher, jedoch habe ich Problem damit, dass Array Person jetzt zu befüllen. Habe jedes mal einen Syntax Fehler. Wie genau befülle ich dieses "Array Person" denn jetzt selbst?
 
Java:
public class Person {
    public final String name;
    public final MonthDay geburtstag;

    public Person(String name, MonthDay geburtstag) {
        this.name = name;
        this.geburtstag = geburtstag;
    }
}

Und damit
Java:
Person[] personenMitIhrenGeburtstagen = new Person[] {
    new Person("Dennis", MonthDay.of(4, 24)),
    new Person("Laura", MonthDay.of(1, 31)),
    new Person("Nico", MonthDay.of(5, 18))
};
 
Habe ein weiteres Problem, und zwar das aktuelle Datum mit denen im Array zu vergleichen.
Habe das Aktuelle Datum schon in String umgewandelt und hänge bei der if- anweisung momentan fest.
Da es sich ja um ein Array handelt und mit einer if-Anweisung benutzt wird, habe ich eine for schleife , dass jeden Einzelnen mit dem aktuellem Datum vergleichen soll.
 
Java:
for (Person p : personenMitIhrenGeburtstagen) {
  if (p.geburtstag.equals(heute)) {
    System.out.println(p.name + " hat heute Geburtstag!");
  }
}

Btw.: nicht jedes 'das', das hinter einem Komma steht, wird 'dass' geschrieben.
 
Habe ein weiteres Problem, und zwar das aktuelle Datum mit denen im Array zu vergleichen.
Habe das Aktuelle Datum schon in String umgewandelt und hänge bei der if- anweisung momentan fest.
Da es sich ja um ein Array handelt und mit einer if-Anweisung benutzt wird, habe ich eine for schleife , dass jeden Einzelnen mit dem aktuellem Datum vergleichen soll.
Du solltest deinen Code auch mal zeigen, dann kann man bestimmt helfen...
 
Vielen Dank für Eure Hilfe, hat soweit auch Funktioniert, nur habe ich irgendwo einen Fehler gemacht, da Laura heute Geburtstag hat.

Java Code:
Java:
package Geburtstag;

import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.time.MonthDay;
import java.util.ArrayList;

public class Person {
    public  String name;
    public  MonthDay geburtstag;

    public Person(String name, MonthDay geburtstag) {
        this.name = name;
        this.geburtstag = geburtstag;
    }


static Person[] Array = new Person[] {
        new Person("Dennis", MonthDay.of(4, 24)),
        new Person("Laura", MonthDay.of(8, 20)),
        new Person("Nico", MonthDay.of(5, 18))
    };


    public static void Datum() {
    DateFormat format = new SimpleDateFormat("dd.MM");
    String currentDate = null;
    Calendar calendar = Calendar.getInstance();
    currentDate = format.format(calendar.getTime());
    Date date = new Date();
    currentDate = format.format(date);
  
  
    for (Person p : Array) {
          if (p.geburtstag.equals(date)) {
            System.out.println(p.name + " hat heute Geburtstag!");
          } else {
              System.out.println("Niemand hat Heute Geburtstag");
          }
        }
    System.out.println(currentDate);
}
  
    public static void main(String[] args) {
        Datum();
    }
  
}
 
Zuletzt bearbeitet von einem Moderator:
Sorry das ich nochmals Störe, aber ich bin auf ein "neues" Problem gestoßen und zwar sollen noch die Namen, die die nicht Geburtstag haben, ausgegeben werden, klappt soweit auch ganz gut, aber wenn ich isAfter mit dazu mache, wird Olaf zwei mal gelistet, falls ich isAfter weglasse, wird Olaf gar nicht gelistet, ist ja logisch, weil Olaf erst nach Laura Geburtstag hat.

Java:
    static Person[] Array = new Person[] { new Person("Dennis", MonthDay.of(4, 24)),
            new Person("Laura", MonthDay.of(8, 20)), new Person("Nico", MonthDay.of(5, 18)),
            new Person("Olaf", MonthDay.of(12, 21)) };

    public static void Datum() {
        DateFormat format = new SimpleDateFormat("dd.MM");
        String currentDate = null;
        Calendar calendar = Calendar.getInstance();
        currentDate = format.format(calendar.getTime());
        Date date = new Date();
        currentDate = format.format(date);

        for (Person p : Array) {
            if (p.geburtstag.equals(MonthDay.now())) {
                System.out.println(p.name + " hat heute Geburtstag!" + "  " + currentDate);

                for (Person b : Array) {
                    if (b.geburtstag.isBefore(MonthDay.now())) {
                        System.out.println(b.name);

                        for (Person a : Array) {
                            if (a.geburtstag.isAfter(MonthDay.now())) {
                                System.out.println(a.name);
                            }

                        }
                    }
                }
            }
        }
    }

    public static void main(String[] args) {
        Datum();

Code:
Laura hat heute Geburtstag!  20.08
Dennis
Olaf
Nico
Olaf
 
Zuletzt bearbeitet von einem Moderator:
Du solltest die Schachtelung deiner Schleifen und ifs noch mal überarbeiten, dass ist sicher nicht das, was du meinst!
 
Ja, danke Mr. Brown, habe das nochmal überarbeitet und läuft jetzt erstmal so wie ich mir das Vorstelle.

Bin grade dabei eine andere Version zu machen, die viel einfacher ist, für das was ich vor habe und zwar mit einer Switch-Case anweisung.

Switch(Der Heutige Tag){

case 1: Heutiger Tag=Geburtstag von einer Person?;
Namen die Nicht Geburtstag haben werden ausgegeben;
case 2: Heutiger Tag != Geburtstag von einer Person?;
Es passiert nichts;
}

Wie löse ich das, wenn ich :


public class Person {
public String name;
public MonthDay geburtstag;

public Person(String name, MonthDay geburtstag) {
this.name = name;
this.geburtstag = geburtstag;
}

Das mit als Hilfe habe, bzw benutzen möchte?
 
Switch-Case dürfte dafür nicht funktionieren, du hast ja hier nicht den Fall, dass du einfache, statische Fälle hast.

Vereinfachen könntest du es minimal, wenn die Person selbst zurückgeben kann, ob sie heute Geburtstag hat.
 
Ah okay, dann muss ich mir was anderes einfallen lassen,

Dann muss ich das so ändern:

for (Person p : Array) {
if (p.geburtstag.equals(MonthDay.now())) {
System.out.println(p.name + " hat heute Geburtstag!" + " " + currentDate);
}
}
for (Person p1 : Array) {
if (!p1.geburtstag.equals(MonthDay.now())) {
System.out.println(p1.name);

Das beim ersten fall, wenn jemand geburtstag hat, die namen ausgegeben , werden die keinen Haben.

und beim Unteren passiert dann in dem Falle nix.
Würde das denn irgendwie gehen?
 
Im ersten Falle, wenn der heutige Tag, mit einem Geburtstag einer der Personen übereinstimmt, dann sollen alle Ausgegeben werden, die an diesem Tag nicht Geburtstag haben, falls aber keine an dem aktuellen Tag Geburtstag hat, soll einfach nix passieren.
So meine ich das. 🙂

Okay, danke werde ich machen 🙂
 
Ah okay, dann muss ich mir was anderes einfallen lassen,
Das andere nennt sich "else".

Code:
for (Person p : Array) {
    if (p.geburtstag.equals(MonthDay.now())) {
        System.out.println(p.name + " hat heute Geburtstag!" + " " + currentDate);
    } else {
        System.out.println(p.name + " hat heute nicht Geburtstag!");
    }
}
 
So meine ich das.
Verstehe:
Code:
boolean einerHatGeburtstag = false;
for (Person p : Array) {
    if (p.geburtstag.equals(MonthDay.now())) {
        System.out.println(p.name + " hat heute Geburtstag!" + " " + currentDate);
        einerHatGeburtstag = true;
    }
}
if (einerHatGeburtstag) {
    for (Person p : Array) {
        if (!p.geburtstag.equals(MonthDay.now())) {
            System.out.println(p.name + " hat heute nicht Geburtstag");
        }
    }
}
 

Neue Themen


Zurück
Oben