Adressbuch

Bitte aktiviere JavaScript!
Hallo Leute,
ich möchte eine Klasse ArrayAdressBook1 für einfache Adressbücher schreiben mit folgenden Eigenschaften:
Ein Adressbuch besitzt ein Attribut persons, welches vom Typ Person[]
ist (wir verwenden hier die Klasse Person:
Java:
public class Person {
    String name;
    int birthday; /* in der Form JJJJMMTT */

    Person(String name, int birthday) {
        this.name = name;
        this.birthday = birthday;
    }

void print() {
System.out.println("Name: " + this.name);
System.out.println("Geburtsdatum: " + this.birthday);
}
boolean isBirthday(int date) {
return birthday % 10000 == date % 10000;
// Das Prozentzeichen ist der Modulo-Operator, welcher
// den Rest einer ganzzahligen Division liefert.
}
}
).
Dieses Attribut soll im Konstruktor des Adressbuchs mit einem neu erzeugten Array initialisiert
werden, wobei die Größe des Arrays dem Konstruktor als Parameter
übergeben wird. Wird eine Größe kleiner als 1 übergeben, soll 1 als Größe
verwendet werden.
Dies habe ich versucht in unterem noch folgendem Code zu implementieren.
Ich möchte aber noch folgendes zusätzlich tun:

Das Adressbuch hat eine Methode addPerson(), welche eine Referenz auf
ein Person-Objekt als Parameter akzeptiert und die übergebene Person an
die erste noch freie Stelle in das Array persons schreibt. Das Array wird
also „von unten“ (beginnend mit Index 0) befüllt. Um die Einfügestelle ermitteln
zu können, bekommt das Adressbuch ein Attribut, welches den Index
des nächsten noch unbelegten Array-Elements repräsentiert. Dieses Attribut
muss natürlich bei Veränderungen aktualisiert werden.
Ok und nun kommt mein Versuch:

Java:
public class ArrayAdressBook1 {
    Person[] persons;

    int startarraylength;

    ArrayAdressBook1(int startarraylength) {

        this.startarraylength = startarraylength;
        // this.startarraylength ist das Attribut des Objektes ArrayAdressBook.
        if (this.startarraylength < 1) {
            this.startarraylength = 1;
        }
        this.persons = new Person[startarraylength];

    }


    void addPerson(){
        for (int i=0;i<persons.length;i++){
        persons[i]= this.persons[i];
        }
     }
}
Nun meine Frage:
Ich dachte, ich hätte mit persons[i]=this.persons das i.te Person-Objekt aus persons mit this angesprochen(das implizit übergeben wurde) und im Array an i-ter Stelle eingefügt.
Ich bin totaler Anfänger und wollte euch fragen, was ihr davon haltet, ob meine Idee schonmal in die richtige Richtung geht oder ich mir ganz was anderes überlegen/wissen sollte.[/i]
 
Zuletzt bearbeitet von einem Moderator:
A

Anzeige




Vielleicht hilft dir unser Java-Tutorial hier weiter —> (hier klicken)
Bitte benutze Code-Tags: [code=Java]Dein Code[/code]. Dann ist Dein Code für alle leichter lesbar. Außerdem werden Array-Indizes der Art [i] sonst durch kursive Formatierung ersetzt.
 
Ich bin totaler Anfänger und wollte euch fragen, was ihr davon haltet, ob meine Idee schonmal in die richtige Richtung geht oder ich mir ganz was anderes überlegen/wissen sollte
Schön, dass du dich für ein sehr facettenreiches Hobby entschieden hast. Ich persönlich halte nicht viel davon, weil es ein reiner Krampf zu werden scheint. Da gibt es bessere Übungsmethoden, sich mit Arrays vertraut zu machen.

Wie habe ich es umgesetzt?
die Person hat:
  • Vorname (String)
  • Nachname (String)
  • Geburtsdatum (LocalDate)
  • Adresse (eine eigenständige Klasse, bietet mehreren Adressen Platz)
  • Kontaktdaten (eine eigenständige Klasse, bietet mehreren Einträgen Platz (Telefon, eMail))
  • Information (Anmerkungen, Informationen in Textform) (List<String>)
Ein PersonenBuch hat
  • List<Person> personen
man kann
  • Personen hinzufügen
  • Personen entfernen
  • Personen gruppieren
  • Personenlisten verwalten
Was braucht man dafür an Kenntnissen
  • Grundkenntnisse über imperative Programmierung
  • Grundkenntnisse über Objektorientierte Programmierung
  • Grundkenntnisse über Listen und Umgang mit diesen
  • Grundkenntnisse über grafische Oberflächen in Java (Swing, FX)
Wenn die Kenntnisse noch ausstehen, dann würde ich das Projekt auf die Wartebank schieben und mich den Grundlagen widmen. Umso schneller kommt man im Endeffekt ans Ziel!
 
  • Grundkenntnisse über grafische Oberflächen in Java (Swing, FX)
Wenn die Kenntnisse noch ausstehen, dann würde ich das Projekt auf die Wartebank schieben und mich den Grundlagen widmen. Umso schneller kommt man im Endeffekt ans Ziel!
Warum braucht man dafür Grundkenntnisse über grafische Oberflächen? So ein Programm lässt sich mEn wunderbar als Konsolenapplikation umsetzen und dient super zur Übung / Festigung der anderen "Grundkenntnisse"
 
Das grafische Darstellen des Buches so wie der sich langsam einstellende Erfolg lösten euphorische Zustände bei mir aus, eventuell ist dieser Kick auf für den TE! :)

Aber du hast Recht, GUI ist hier nicht entscheidend und kann im Nachhinein hinzugefügt werden.
 
täglich bräuchte ich das nich mehr
Darum geht es nicht. Das ist 8-Bit-Technik, knapp 1 MHz Takt und 64 KiB RAM, wovon ein Teil durch Geräte und ROM belegt ist. Die CPU hat nur eine Handvoll Register, der Befehlssatz ist mehr als überschaubar. Die Herausforderung besteht also darin, aus dem wenigen, das man zur Verfügung hat, das Maximum herauszuholen. Das würde dem ein oder anderen heutzutage auch nicht schaden :)
 
Hallo Leute,
Danke für die Kommentare, ich liess sie in mein Problemlösungsversuch einfliessen.
Also ich kann das Problem jetzt runterbrechen auf das Befüllen des Arrays persons mit einer übergebenen Person :
in der Methode addPerson(Person p) befülle ich folgendermaßen:
Java:
i=0;
persons[i]=p;
Damit hätte ich die übergebene Person ins erste Arrayelement getan. Ich weiss nicht, ob meine Idee mich weiterbringt.
Falls ihr noch weitere Tipps/Bemerkungen habt, bin dafür immer dankbar.
Viele Grüße
Scratchy
 
Hallo Leut, meine aktuelle Version sieht so aus
Java:
public class ArrayAdressBook1 {
    Person[] persons;

    int startarraylength;
    boolean[] freiindex;

    ArrayAdressBook1(int startarraylength) {

        this.startarraylength = startarraylength;
        // this.startarraylength ist das Attribut des Objektes ArrayAdressBook.
        if (this.startarraylength < 1) {
            this.startarraylength = 1;
        }
        this.persons = new Person[startarraylength];

    }

    for(int i = 0;i<persons.length;i++){
      

    void addPerson(Person p) {
        freiindex[i]=true;
       if (freiindex[i]=true){
        persons[i]=p;
        freiindex[i]=false;
        i=i+1;
        }
      }
}}
 
Zuletzt bearbeitet von einem Moderator:
Moin,
sieht irgendwie falsch aus.
alleine dieser Teil ist schon ausgesprochen humorvoll:
Java:
for(int i = 0;i<persons.length;i++)
{
    void addPerson(Person p)
    {
        freiindex[I]=true;
        if(freiindex[I]=true)
        {
            persons[I]=p;
            freiindex[I]=false;
            i=i+1;
        }
    }
}
(a) Du kannst doch nicht innerhalb einer Schleife ein neue Methode deklarieren :eek:
(b) was ist 'I' ?????
(c) "if(freiindex=true)" ist eine Zuweisung, KEIN Vergleich !!
(d) wo sollte hier 'p' herkommen??
(e) wo kommt 'freiindex' her (und bedeutet das??) ??

VG Klaus
 
(f) Selbst wenn if(freiindex[i]=true) ein Vergleich wäre. Was denkst du, was er nach diesen Zeilen ergeben würde?
Java:
freiindex[i]=true;
if(freiindex[i]=true)
[/i]
 
Zuletzt bearbeitet von einem Moderator:
Hi Leute,
Moin,

alleine dieser Teil ist schon ausgesprochen humorvoll:
Java:
for(int i = 0;i<persons.length;i++)
{
    void addPerson(Person p)
    {
        freiindex[i]=true;
        if(freiindex[i]=true)
        {
            persons[i]=p;
            freiindex[i]=false;
            i=i+1;
        }
    }
}
(a) Du kannst doch nicht innerhalb einer Schleife ein neue Methode deklarieren :eek:
(b) was ist 'I' ?????
(c) "if(freiindex=true)" ist eine Zuweisung, KEIN Vergleich !!
(d) wo sollte hier 'p' herkommen??
(e) wo kommt 'freiindex' her (und bedeutet das??) ??

VG Klaus
Zu (a) Ich hab einen Tipp wo anders bekommen:
Der Index 0 ist ja nur richtig, wenn addPerson() das erste Mal aufgerufen wird. Das ist Ihnen wohl auch irgendwie klar, weswegen Sie mit Schleifen herumexperimentieren. Aber: /Ein/ Aufruf der Methode entspricht /einem/ Hinzufügen /einer/ Person. Eine Schleife innerhalb der Methode kann also nicht der richtige Weg sein. Stattdessen müssen Sie dafür sorgen, dass beim nächsten Aufruf der nächste Slot gewählt wird. Die Methode selbst hat aber keine Möglichkeit, zu wissen, wie oft sie aufgerufen wurde. Diese Information muss also außerhalb der Methode gespeichert sein. Mein neuer Versuch ist somit:
Java:
public class ArrayAdressBook1 {
    Person[] persons;

    int startarraylength;
    boolean[] freiindex;

    ArrayAdressBook1(int startarraylength) {

        this.startarraylength = startarraylength;
        // this.startarraylength ist das Attribut des Objektes ArrayAdressBook.
        if (this.startarraylength < 1) {
            this.startarraylength = 1;
        }
        this.persons = new Person[startarraylength];

    }

    for(int i = 0;i<persons.length;i++){
    
        freiindex[i]=true;

     void addPerson(Person p) {
      
      persons[i]=p;
     }
        i=i+1;
    
    freiindex[i]=false;
    }
}
(f) Selbst wenn if(freiindex[I]=true) ein Vergleich wäre. Was denkst du, was er nach diesen Zeilen ergeben würde?
Java:
freiindex[i]=true;
if(freiindex[i]=true)
[/I]
Ja das stimmt, es wäre immer true, aber das Adressbuch ist am Anfang sowieso leer. Ich hatte den Tipp bekommen:
"Damit es kein Chaos gibt, befüllt das Adressbuch das Array schön der Reihe nach, beginnend mit dem Index 0. Dazu muss es sich aber noch etwas merken und bei jedem Befüllen anpassen, nämlich die nächste freie Stelle im Array."
Ich hab das wahrscheinlich nicht richtig umgesetzt.Ich möchte die Information, welcher der nächste freie Index ist in freiindex speichern.

Zu (b): I soll eigentlich i sein, aber wenn ich Tags um meinen Code mache, wird es manchmal nicht richtig übernommen.
zu (c)Wenn ich vergleichen will, kann/soll/darf ich dann if (freiindex[I]==true) schreiben? Oder wie macht man das in Java?
Zu(D): p ist die an die Methode addPerson übergebene Person p. Ich habe noch eine zusätzliche Klasse Person geschrieben, die da lautet:
Java:
public class Person {
    String name;
    int birthday; /* in der Form JJJJMMTT */

    Person(String name, int birthday) {
        this.name = name;
        this.birthday = birthday;
    }

void print() {
System.out.println("Name: " + this.name);
System.out.println("Geburtsdatum: " + this.birthday);
}
boolean isBirthday(int date) {
return birthday % 10000 == date % 10000;

}
}
zu (e) darin soll der nächste freie Index des Arrays persons stehen, damit ich die übergebene Person darin speichern kann.
[/I]
 
Zuletzt bearbeitet von einem Moderator:
Moin,

zu (a) immer noch keine Code-Tags :( Schau doch mal in meine Signatur ...
Weiterhin gilt imm ernoch, dass Du innerhalb einer Schleife KEINE Methode deklarieren kannst !!
Hast Du mal versucht Dienen Code zu compilieren ??

zu (b) zu den Code-Tags siehe (a) ;)

zu (c)
Java:
freiindex = true;  // ist eine Zuweisung
if( freiindex == true ) ...  // der Vergleich, ob die Variable den Wert TRUE hat
if( freiindex )  // reicht zur Prüfung auf TRUE
if( ! freiindex )  // reicht zur Prüfung auf FALSE
zu (d) ich würde ggf. noch Getter und Setter hinzufügen
ABER:
Java:
int birthday; /* in der Form JJJJMMTT */
ein Integer der Form "JJJJMMTT" ??? Ist das SO vorgegeben??
Es gibt doch Datum-/Zeit-Klassen und -bibliotheken!!

VG Klaus
 
Dein Betreuer (vermute ich mal) hat Dir richtigerweise geschrieben:
Eine Schleife innerhalb der Methode kann also nicht der richtige Weg sein.
Das heißt aber nicht, dass Du eine Schleife um die Methode legen sollst, sondern dass Du überhaupt keine Schleife verwenden sollst.

Weiter wird ausgeführt:
Stattdessen müssen Sie dafür sorgen, dass beim nächsten Aufruf der nächste Slot gewählt wird. Die Methode selbst hat aber keine Möglichkeit, zu wissen, wie oft sie aufgerufen wurde. Diese Information muss also außerhalb der Methode gespeichert sein.
Da steht alles haarklein drin, er hätte Dir fast schon den Code schreiben können.
 
A

Anzeige




Hier lernst du alle wichtigen Java-Grundlagen.
Passende Stellenanzeigen aus deiner Region:

Neue Themen

Oben