Hallo,
ich bearbeite gerade eine (freiwillige) Übung zu Arrays. Ich fasse diese mal kurz zusammen:
-Ein Adressbuch-Objekt das in einem Array mehrere Person-Objekte (die haben erstmal nur Name/Vorname) speichern soll, wobei die Anfangsgröße des Arrays als Parameter des Konstruktors übergeben wird.
-Eine Methode addPerson(), die ein Person an die nächste freie Stelle schreibt. Um diese Stelle zu ermitteln, 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.
-Prüfen ob der Array bereits voll ist. Wenn ja, soll ein neuer Array doppelter Größe angelegt und der alte Array dort hineinkopiert werden. Dieses Verdoppeln soll in eine eigene private Methode ausgelagert werden.
-Methode getEntriesAsString().
Die erste Zeile enthält eine Information über die Anzahl der Einträge und die aktuelle Kapazität des Adressbuchs,also etwa "3 of 10". Die anderen Zeilen bestehen aus den Rückgabewerten von Aufrufen der Methode getPersonAsString() auf den einzelnen Personen.
Mein bisheriges Programm:
Problem: Mit 2 Personen gehts, bei 4 wird korrekt verdoppelt, bei mehreren erhalte ich ne Exception:
Seltsamerweise spuckt er sogar bei z.B. 18 von 32 keine weiteren außer die an der Stelle oben aus. Es muss eine Fehler nach den ersten 2/3 Elementen aber ich verstehs einfach nicht...
Wäre toll, wen ihr trotz des Kilometer langem Posts, mir etwas helfen könntet
Danke!
ich bearbeite gerade eine (freiwillige) Übung zu Arrays. Ich fasse diese mal kurz zusammen:
-Ein Adressbuch-Objekt das in einem Array mehrere Person-Objekte (die haben erstmal nur Name/Vorname) speichern soll, wobei die Anfangsgröße des Arrays als Parameter des Konstruktors übergeben wird.
-Eine Methode addPerson(), die ein Person an die nächste freie Stelle schreibt. Um diese Stelle zu ermitteln, 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.
-Prüfen ob der Array bereits voll ist. Wenn ja, soll ein neuer Array doppelter Größe angelegt und der alte Array dort hineinkopiert werden. Dieses Verdoppeln soll in eine eigene private Methode ausgelagert werden.
-Methode getEntriesAsString().
Die erste Zeile enthält eine Information über die Anzahl der Einträge und die aktuelle Kapazität des Adressbuchs,also etwa "3 of 10". Die anderen Zeilen bestehen aus den Rückgabewerten von Aufrufen der Methode getPersonAsString() auf den einzelnen Personen.
Mein bisheriges Programm:
Java:
package AddressBook;
public class AddressBookTest {
public static void main(String[] args) {
// create person
Person p1 = new Person("Name1", "Nachname1");
Person p2 = new Person("Name2", "Nachname2");
Person p3 = new Person("Name3", "Nachname3");
Person p4 = new Person("Name4", "Nachname4");
Person p5 = new Person("Name5", "Nachname5");
// create addressbook and fill in person
ArrayAddressBook book = new ArrayAddressBook(2);
book.addPerson(p1);
book.addPerson(p2);
book.addPerson(p3);
book.addPerson(p4);
book.addPerson(p5);
// fetch person from book and print it
book.getEntriesofString();
}
}
Java:
package AddressBook;
/**
*
* @author Julian
*/
public class Person {
String vorname;
String nachname;
Person(String vorname, String nachname){
this.vorname = vorname;
this.nachname = nachname;
}
String getPersonAsString(){
return vorname+" "+nachname;
}
}
Java:
package AddressBook;
public class ArrayAddressBook {
int count;
Person[] persons;
ArrayAddressBook(int groesse){
persons = new Person[groesse];
}
void addPerson(Person p){
if (count == persons.length)
verdopple();
persons[count] = p;
count++;
}
void verdopple(){
Person[] doppelArray = new Person[persons.length*2];
for (int i =0; i < persons.length;i++)
doppelArray[i] = persons[i];
persons = doppelArray;
}
void getEntriesofString(){
System.out.println(count+" of "+(persons.length));
for(Person p : persons)
System.out.println(p.getPersonAsString());
}
}
Code:
5 of 8
Exception in thread "main" java.lang.NullPointerException
Name1 Nachname1
Name2 Nachname2
at AddressBook.ArrayAddressBook.getEntriesofString(ArrayAddressBook.java:30)
Name3 Nachname3
at AddressBook.AddressBookTest.main(AddressBookTest.java:27)
Name4 Nachname4
Name5 Nachname5
Seltsamerweise spuckt er sogar bei z.B. 18 von 32 keine weiteren außer die an der Stelle oben aus. Es muss eine Fehler nach den ersten 2/3 Elementen aber ich verstehs einfach nicht...
Wäre toll, wen ihr trotz des Kilometer langem Posts, mir etwas helfen könntet
Danke!