Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Hallo. Es geht um ein kleines Beispielprogramm, welches die Erzeugung von Book und Libraryelementen simuliert. Im Folgenden mein Quelltext:
Hello Library
Java:
public class HelloLibrary {
// Simulation durch main()
public static void main(String[] args) {
// Erzeugung von 2 Book-Objekten
Book hdr = new Book("Herr der Ringe");
Book hp = new Book("Harry Potter");
// Erzeugung eines Library-Objektes
Library slub = new Library();
// register Books in Library
slub register(hdr);
slub register(hp);
}
}
Book ->
Java:
public class Book {
// Deklaration privater Titel
private String title;
// setzt privaten Titel auf Titel, der der Methode übergeben wird
public Book(String title) {
this.title = title;
}
}
Library ->
Java:
public class Library {
// deklariert privates Array von Büchern
private Book [] myBooks;
// deklariert private Nummer
private int number;
// Methode stellt Bücherarray 10 Plätze zur Verfügung, setzt Number auf 0, macht Ausgabe
public Library() {
myBooks = new Book[10];
number = 0;
System.out.println("Hello, I am a small library for at most 10 books.");
}
// Methode registriert Buch an aktueller Stelle im Array, erhöht Number, macht Ausgabe
public void register(Book book) {
myBooks[number] = book;
number += 1;
System.out.println("A new book is registered: " + book);
}
}
Beim Kompillieren meldet die Konsole Probleme in folgenden Zeilen der HelloLibrary-class:
slub register(hdr);
slub register(hp);
Diese Zeilen sollen eigentlich lediglich die zuvor erzeugten Bücher in der zuvor erzeugten Library registrieren. Ich hab syntaktisch auch schon etwas rumprobiert, aber keine Lösung gefunden. Kann mir jemand auf die Sprünge helfen?
Ach herrje, da hätt ich auch selber drauf kommen können Vielen Dank, jetzt läufts.
Einen kleinen Schönheitsfehler gibt es aber dennoch. Das Programm gibt nach "A new Book is registered:" nicht wie geplant den Titel, sondern den Speicherplatz des Buchs aus. Brauch ich dafür noch eine Extramethode, welche diesen in ein String umwandelt?
Um der kleinen Bibliothek wenigstens etwas Sinnhaftigkeit zu verleihen, hab ich mir ausgedacht eine kleine Ausleihfunktion zu integrieren.
Die Bücher haben also alle einen Status
// macht Titel öffentlich
public String getTitle() {
return title;
}
Damit kann ich nun in meine Bibliothek eine Ausleih- und eine Suchmethode (weil man das Buch ja erst finden muss) implementieren.
Java:
// deklariert private testnumber für Schleifensuche
private int testnumber;
// Methode sucht ob es Buch mit übergebenen Titel in der Bibliothek gibt und gibt dieses zurück
public Book search(String title){
testnumber=0;
while(testnumber<=number){
if(myBooks[testnumber].getTitle().equals(title)) {
return myBooks[testnumber];
}
else testnumber += 1;
}
return null;
}
// Methode verleiht Buch mit übergebenen Titel
public void loan(String title){
if(search(title)==null) System.out.println("Book is not registered");
if(search(title).getState()==false) System.out.println("Book is not available at the moment.");
else {
System.out.println("Here you are.");
search(title).setState(false);
}
}
Soweit so gut. Funktioniert alles bis auf den Fall, dass kein Buch mit dem gewünschten Titel existiert. Wenn ich versuche ein solches Buch auszuleihen bekomm ich einen "java.lang.nullpointerexception"-Error. Dieser steht laut Google wohl dafür, dass der Skript auf nicht vorhandene Objekte zugreifen will. Das leuchtet mir auch ein, aber trotzdem muss ich diesen Fall doch abdecken können, wenn die search()-Methode eine null zurückgibt?