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.
import java.util.LinkedList;
import java.util.Iterator;
public class Bibliothek{
private LinkedList <Buch> buechter = new LinkedList<Buch>();
private LinkedList<Buch> ausgelieheneBuecher = new LinkedList<Buch>();
public void registrieren(Buch buch)throws Exception{
if (buch == null ){
throw new Exception("Buch darf nicht null sein")
}
buechter.add(buch);
}
public Buch ausleihen(String titel) throws Exception{
if(titel == null){
throw new Exception("Titel darf nicht null sein")
}
for(int i = 0; i < buecher.size(); i++){
}
}
}
ich komme ab zeile 23 nichtmehr zurecht.
ich habe noch eine klasse Buch wo ich im konstruktor
public Buch(String titel, String autor, double preis, String isbn)
und auch methoden public String getIsbn(): und toString
wie soll ich in der liste durchlaufen und einzeln titeln anschauen?
sollte ich noch in der klasse buch noch getTitel() implementieren? damit ich dan vergleichen kann, obwohl es in der angabe nicht gegeben ist?
danke vielmals
lg nata
ist die methodendeklaration auch so vorgegeben? weil string/titel als paramter, klingt vllt eher nach einer methode : sucheBuch oder so ähnlich. bei ausleihen, würd ich persönlich wahrscheinlich eher ein buch als paramter verlangen und dann entweder true zurückgeben, wenn ausleihen erfolgreich war, oder false, wenn buch bereits ausgeleiht ist, oder irgendwie so
aber wenn das jetzt die aufgabe sprengt, soll dich das nicht weiter verwirren
achja und
Java:
private LinkedList <Buch> buechter = new LinkedList<Buch>();
schnell mal das t bei buechter entfernen ;D
und es wäre vllt vom vorteil, [c]private List<Buch> buecher = ...[/c] zu schreiben.
- public Buch ausleihen(String titel): Der Titel darf nicht null sein – wenn er
es ist, dann werfe eine Exception. Überprüfe danach ob es in der Bibliothek ein
Buch mit dem übergebenen Titel gibt. Wenn nicht, dann werfe eine Exception.
Wenn schon, dann gebe das erste Buch zurück, das diesen Titel hat und
beende danach sofort die Methode. Trage davor noch das Buch in die Liste
ausgelieheneBuecher ein und entferne es aus der Liste Bücher
wenn es public Buch ausleihen(Buch buch ) so wäre, glaube dass ich was vorüberbringen könnte.Glaubt ist dass es public Buch ausleihen(String titel) nicht stimmt?
nein, wenn die aufgabenstellung so ist, dann ist das schon richtig was du da machst.
(vllt würde sich da aber eher eine for-each-schleife eignen,
Java:
for(Buch buch: buecher) {
if(buch.getTitle().equals(titel))..... //oder so
mit der schleife die du jetzt hast ginge es aber auch)
aber eine getTitel() methode würde ich in deiner buch-klasse trotzdme implementieren(siehe oben), und dann halt jedne titel mit dem übergebenen titel vergleichen, wenn ein title equals dem übergebenen titel ist --> return buch;
falls nicht, --> werfe zum schluss eine exception (find ich zwar persönlich auch etwas merkwürdig, aber wenn das so in der aufgabenstellung steht, nunja )
soll ich für remove() methode eine Iterator implementieren?
Java:
public Buch ausleihen(String titel) throws Exception{
Buch ausgabeBuch;
if(titel == null){
throw new Exception("Titel darf nicht null sein");
}
for(int i = 0; i < buecher.size(); i++){
Buch aktuallerBuch = buecher.get(i);
if(!aktuallerBuch.getTitel().equals(titel)){
throw new Exception("Das buch ist nicht in vorhanden");
}
ausgabeBuch = aktuallerBuch ;
}
ausgelieheneBuecher.add(ausgabeBuch);
return ausgabeBuch;
}
jetzt sagt es mir dass ausgabeBuch nicht inizialisiert ist
In diesem Fall wären also 2 Bücher gleich, wenn ihre Titel die selben sind. Ob das sinnvoll ist, musst du entscheiden. Ich finde es nicht sehr sinnvoll, da ist die ISBN schon eindeutiger. Hilft dir aber nix wenn du in der ausleihen()-Methode nur den Titel bekommst. Das halte ich schon für einen Design-Fehler, man sollte da die ISBN bekommen.
Also.. ich nehme an du solltest dir einfach einen Getter für den Titel basteln, auch wenn das nicht in der Angabe steht. Eine andere Option hast du ja gar nicht.
edit: Mal wieder Foren-Bug. Passiert euch das auch, dass ihr einen Thread anklickt und es werden keine Antworten gezeigt? Ich dachte es gibt noch keine Antwort,und als ich diese hier losgeschickt hab hab ich plötzlich all die anderen Antworten gesehen :bahnhof:
was ich da oben auf der 10.zeile habe if(!aktuallerBuch.getTitel().equals(titel))
ist das grobbe Fehler?
ich dachte dass ich mit aktuallerBuch.getTitel() werde ich titel aufrufen
die klasse Buch habe ich scon ausgebessert wie der benutzer eRaaa mit empfolen hat und läuft gut zum glück
Java:
public class Buch{
private String titel;
private String autor;
private double preis;
private String isbn;
public Buch(String titel, String autor, double preis, String isbn)throws Exception{
setTitel(titel);
setAutor(autor);
setPreis(preis);
setIsbn(isbn);
}
public void setTitel(String titel)throws Exception{
if(titel == null){
throw new Exception("Titel darf nicht null sein");
}
if(titel.length() < 1 || titel.length() > 30){
throw new Exception("Titel darf bis 30 zeichen lang sein");
}
this.titel = titel;
}
public void setAutor(String autor)throws Exception{
if(autor == null){
throw new Exception("Autor darf nicht null sein");
}
if(autor.length() < 1 || autor.length() > 30){
throw new Exception("Autor darf bis 30 zeichen lang sein");
}
this.autor = autor;
}
public void setPreis(double preis)throws Exception{
if(preis < 3.5 || preis > 350){
throw new Exception("preis soll zwischen 3 euro und 350 euro sein");
}
this.preis = preis;
}
public void setIsbn(String isbn)throws Exception{
if(isbn.length() < 7 || isbn.length() > 12){
throw new Exception("Isbn nummer darf nur 7 bis 12 zeichen enthalten");
}
for(int i = 0 ; i < isbn.length() -1 ; i++){
char c = isbn.charAt(i);
if(!Character.isDigit(c) && isbn.charAt(i) != '-' ){
throw new Exception("Isbn soll bis letzte buchstaben nur ziffern oder bindestriche enthalten");
}
}
if(!Character.isDigit(isbn.charAt(isbn.length()-1)) && isbn.charAt(isbn.length()-1) != '-' && isbn.charAt(isbn.length()-1) != 'X'){
throw new Exception("letzte zeichen soll entweder zahl ,bindestrich oder X sein");
}
this.isbn = isbn;
}
public String getIsbn(){
return isbn;
}
public String getTitel(){
return titel;
}
public String toString(){
return autor + " " + titel + " " + isbn + " "+ preis;
}
}
Das mit dem Getter und deiner Prüfung ist schon richtig so, ich hab die ganze Diskussion nicht mitbekommen (siehe mein edit im letzten Beitrag).
Allerdings machst du noch etwas falsch in der Schleife. Und zwar wirfst du die Exception, wenn nicht gleich das erste Buch den gesuchten Titel enthält. Aber du musst ja natürlich alle Bücher durchsuchen. Deshalb solltest du die Meldung erst werfen wenn es das Buch wirklich nirgendwo in der Liste gibt.
Außerdem kannst du die Suche abbrechen, sobald das Buch gefunden wurde. Also zwei Änderungen:
Java:
for(int i = 0; i < buecher.size(); i++){
Buch aktuallerBuch = buecher.get(i);
if(aktuallerBuch.getTitel().equals(titel)){ // wenn die Titel übereinstimmen
ausgelieheneBuecher.add(aktuellerBuch);
return aktuellerBuch; // btw: aktuellesBuch ist besseres deutsch ;)
}
}
// wenn wir hier ankommen, hat kein Buch in der Liste mit dem Titel gematcht:
throw new Exception("Das buch ist nicht in vorhanden");