Java Liste programmieren?

 - (Programm, Software, Programmieren)

6 Antworten

Dazu erstellst Du zunächst eine Klasse Person, die die entsprechenden Felder beinhaltet, die du abfragen möchtest.

Im Anschluss baust Du dir eine Logik, die diese Werte abfragt. Dazu wird ein Person Objekt erzeugt und mit den Werten gefüllt.

Diese werden in einer Collection (Set oder List) abgespeichert.

Ich verstehe eine erste Sache überhaupt nicht: Du schreibst, dass du wüsstest, dass dein Code noch formatiert werden müsse. Aber wieso hast du es nicht gleich getan - zumindest vor Erstellen dieser Frage? Ich möchte an dieser Stelle darauf aufmerksam machen, dass die Formatierung nicht irgendeine eine Formsache ohne Hintergrundgedanken ist, die man ja lästigerweise noch zu erledigen hat, sondern dazu dient, dass du oder andere Programmierer den Code gut lesen können.

Oder anders formuliert: Fändest du es toll, wenn ich dir im Gegenzug eine Lösung hinrotzen würde, welche den ersten Preis bei jedem Obfuscated Perl Contest gewinnen könnte?

Weiter geht es, nun zu deinem Problem. Um ein solches lösen zu können, solltest du es zuerst analysieren / beschreiben und dann einen Lösungsweg dazu bilden. Nicht on-the-fly und fernab vom Computer. Im Fokus steht zunächst die Logik, der schrittweise Ablauf zu einer Lösung.

Es geht darum, Daten zu Familienmitgliedern einzuholen und mit diesen folgend zu rechnen. Um dies zu vereinfachen, wandle die Pluralform in Singular um: Schau, wie von einer Person Daten eingeholt werden können. Bevor man die Daten einholt, wäre es zudem entscheidend, einen Träger für die Daten zu haben (Datenmodell) - ein Objekt Person:

Person:
  -birthdate: date
  -name: string

So, neben den Eigenschaften der Person, sind noch die Anforderungen des Systems zu definieren:

  • Personen müssen erstellt werden können
  • Personen müssen einer Liste zugefügt werden können
  • Man muss auf eine Person via Name zugreifen können
  • Zu einer Person muss das aktuelle Alter errechnet werden können

Der erste Punkt lässt sich über den Konstruktor lösen:

Person(name, birthday):
  this.name = name
  this.birthday = birthday

Für den zweiten Punkt kann man sich die bereits vorhandene Implementation einer Liste aus der Java Standardbibliothek zunutze machen.

Für den dritten Punkt bedarf es eines Algorithmus, der durch die Liste an Personen läuft, und nach einer Person mit dem passenden Namen sucht. Ich denke, das erste Vorkommen reicht aus:

iterate over persons:
  if person.name equals nameToSearchFor
    return person
return not found

Diese Funktionalität könnte man gut mitsamt der Personenliste in einer weiteren Klasse gruppieren, die eine Familie abbildet.

Zu guter Letzt ein Algorithmus für Punkt 4:

age = currentDate - birthdate

Aber im Grunde erledigen bereits vorhandene Java-Klassen diese Aufgabe, exakte Zeitberechnungen muss man nicht selbst vornehmen.

Das lässt sich nun schon in Java-Code übersetzen. Einmal hat man eine Klasse Person:

class Person {
  private LocalDate birthdate;
  private String name;

  public Person(String name, LocalDate birthdate) {
    this.name = name;
    this.birthdate = birthdate;
  }

  public int getAge() {
    LocalDate today = LocalDate.now();
    Period timePeriod = Period.between(birthday, today);
    return timePeriod.getYears();
  }

  public String getName() {
    return name;
  }
}

Und dann muss irgendwann / irgendwo im Programmablauf ja noch eine Liste an Familienmitgliedern bestehen.

class Family {
  private List<Person> members;

  public Familiy() {
    members = new ArrayList<>();
  }

  public void addMember(String name, LocalDate birthdate) {
    members.add(new Person(name, birthdate));
  }

  public Person getMember(String name) {
    for (Person member : members) {
      if (member.getName().equals(name)) {
        return member;
      }
    }
    
    return null;
  }
}

Der Rest ist trivial, daher überlasse ich es dir. Eine Familie muss anlegt und ihr neue Mitglieder zugefügt werden. Die Anzahl an Mitgliedern (sobald man sie denn erfragt hat) lässt sich via for-Schleife kontrolliert steuern - so wie du es ja schon vor hattest.

Alternativ zu einer Liste könntest du im Übrigen eine Map verwenden, die einen Namen mit einem Geburtsdatum assoziiert. Dann bräuchte es auch keiner eigenen Suchfunktion mehr nach einem Familienmitglied.

Was genau soll die erste for-Schleife bewirken?

So wie ich das sehe, wird einfach nur die Nachricht "Mitglied" und danach die Stelle ausgegeben. Was genau bringt das? :D

int currentYear = Calendar.getInstance().get(Calendar.YEAR);

HashMap<String, Integer> familyMembers = new HashMap<String, Integer>();

Integer amount = readInt("Wieviele Familienmitglieder gibt es?");

for (int i = 0; i<amount; i++){
    String tmpName = readline("Wie heißt das Familienmitglied?");
    Integer tmpBornYYYY = readInt("In welchem Jahr wurde " + tmpName + " geboren?");
    
    familyMembers.put(tmpName, tmpBornYYYY);
}


String searchName = readline("Von wem wollen Sie das Alter wissen?");

bool foundMember = familyMembers.containsKey(searchName);

if (foundMember){
    int memberAge = familyMembers[searchName];
    System.out.println(searchName + " ist " + memberAge + " Jahre alt...");
}else{
    System.out.println(searchName + " wurde nicht gefunden...");
}

Habe kein Java installiert (werde es mir auch nicht installieren).
Bedeutet ich konnte den Code nicht testen, aber er sollte so grob funktionieren.

Wenn du willst, dass du immer und immer wieder nach einem Alter nachfragen kannst, dann musst du den unteren Part in eine while packen...

MFG xGlumi

Woher ich das weiß:Eigene Erfahrung – Programmier/IT Erfahrung seit 2009 (Freizeit und Beruf)

Ich denke dein Problem liegt erstmal darin, dass du nicht ausreichend geplant hast, wie dein Programm zum Schluss aussehen soll. Und weiterhin scheint es auch so, als wärst du noch sehr neu in Sachen Programmieren. Du solltest dir vielleicht mehr Grundkenntnisse aneignen und erstmal Sachen aus verschiedenen Lerneinheiten programmieren, die Online angeboten werden. Es wäre z.B. ratsam einfach mit Applikationen zu arbeiten und nicht mit Konsolenprogrammen.

Ja das stimmt , bin neu in diesem Gebiet und weis nicht wie ich die einzelne Kenntnisse einbauen solle , wie würdest du denn hier vorgehen ?

0
@zelosim

Naja, ehrlich gesagt ist es halt schwer dir die meisten Sachen zu erklären, wenn es dir an den Kenntnissen mangelt. Ich kann dir natürlich die Lösung geben, aber das hat ja dann natürlich keinen Mehrwert, wenn das für dich eine Übung in Sachen Programmieren sein soll. Wie gesagt empfehle ich dir einfach mehr oder weniger bei 0 anzufangen und dir eine ordentliche Wissensbasis aufzubauen. Es gibt im Internet viele hilfreiche Tutorials die dir Programmieren näher bringen. Ich kann auch das Lernen mithilfe von Büchern empfehlen. Ich würde dir die verschiedenen Bücher vom Rheinwerk Verlag ans Herz legen. Die kosten im Schnitt so 10-15€ und lehren dich meiner Meinung nach auf eine sehr verständliche Art und Weise das Programmieren :)

0
@dfoisdjfisodf

10-15€? Das hört sich nach der üblichen Rheinwerk-Verlag-Preiskategorie an. 😉

0
@regex9

Okay, es mag zwar nicht die übliche sein, jedoch beziehe ich mich auf die Bücher, die die Grundlagen vermitteln und die kosten eben im Schnitt so 10-15€ wenn ich mich nicht irre :D

0

Was möchtest Du wissen?